假设我有一个包含这样文档的集合:
@echo off
start chrome "http://google.com"
start chrome "http://yahoo.com"
start chrome "http://bing.com"
@echo off
start chrome "http://google.com"
Timeout 3
start chrome "http://yahoo.com"
Timeout 3
start chrome "http://bing.com"
我有15个类别,每个类别有100万条记录。因此,我在这个集合中有15M文档。
我不做很复杂的查询。大多数情况下,我从n类获得一些文件:
{
category_id : 5
data : (some data)
(more data...)
}
我想知道将这个主要集合分成15个集合是否更好,这样每个集合中只有属于某个类别的文档。然后我不需要在查询中指定db.collection.find({category_id: n, (some other conditions) })
,而是使用该类别的相应集合:
category_id
这会使查询更快和任何疑虑吗?
答案 0 :(得分:0)
让我们考虑以下示例。我们有一个具有以下架构的用户(不打算有任何意义):
{
"id":123
"posts" : [...],
"favorites" : [...],
"settings" : {},
"followers" : [...],
"email" : "anyEmail@email.com",
"age" : 29
}
对于那个人,如果你有时候通过"收藏和关注者等组织来查询字段。但是您对其他字段不感兴趣,您可以在单独的集合中提取这些字段并具有专用查询。这里的目的是根据您的使用情况进行建模,而不是根据您的真实世界模型进行建模!
您需要怀疑的是"我的收藏品支持的实际用例是什么? &#34 ;.如果你支持很多,只需将它们分开。
另一方面,即使您在不同的字段上查询但总是想要检索整个文档,那么您的收藏可能会以一种好的方式支持您的查询。获得更好性能的一种方法是在您经常使用的字段上添加索引(官方文档:https://docs.mongodb.org/manual/core/indexes/)。最终,分片可能是您正在寻找的东西,因为集合很大,可能与基于任意属性分割记录和将数据库分布在多台机器上相关。