有了MongoDB,我应该把一个大集合分散到更小的集合中吗?

时间:2016-01-10 11:50:08

标签: mongodb

假设我有一个包含这样文档的集合:

@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

这会使查询更快和任何疑虑吗?

1 个答案:

答案 0 :(得分:0)

让我们考虑以下示例。我们有一个具有以下架构的用户(不打算有任何意义):

{
"id":123
"posts" : [...],
"favorites" : [...],
"settings" : {},
"followers" : [...],
"email" : "anyEmail@email.com",
"age" : 29
}

对于那个人,如果你有时候通过"收藏和关注者等组织来查询字段。但是您对其他字段不感兴趣,您可以在单独的集合中提取这些字段并具有专用查询。这里的目的是根据您的使用情况进行建模,而不是根据您的真实世界模型进行建模!

您需要怀疑的是"我的收藏品支持的实际用例是什么? &#34 ;.如果你支持很多,只需将它们分开。

另一方面,即使您在不同的字段上查询但总是想要检索整个文档,那么您的收藏可能会以一种好的方式支持您的查询。获得更好性能的一种方法是在您经常使用的字段上添加索引(官方文档:https://docs.mongodb.org/manual/core/indexes/)。最终,分片可能是您正在寻找的东西,因为集合很大,可能与基于任意属性分割记录和将数据库分布在多台机器上相关。