对于MongoDB,我是否应该将一个大集合拆分为几个小集合?

对于MongoDB,我是否应该将一个大集合拆分为几个小集合?,mongodb,Mongodb,假设我有一个收藏,里面有这样的文档: { category_id : 5 data : (some data) (more data...) } 我有15个分类,每个分类有一百万条记录。因此,我收集了1500万份文件 我不做非常复杂的查询。我主要通过以下方式从类别n中获取一些文档: db.collection.find({category_id: n, (some other conditions) }) 我想知道是否最好将这个主要的集合分成15个集合,这样每个集合都

假设我有一个收藏,里面有这样的文档:

{
    category_id : 5
    data : (some data)
    (more data...)
}
我有15个分类,每个分类有一百万条记录。因此,我收集了1500万份文件

我不做非常复杂的查询。我主要通过以下方式从类别n中获取一些文档:

db.collection.find({category_id: n, (some other conditions) })
我想知道是否最好将这个主要的集合分成15个集合,这样每个集合都只有属于特定类别的文档。然后我不需要在查询中指定
category\u id
,而是为该类别使用相应的集合:

db.collection.find({ (some conditions) })

<>这会使查询更快,有任何顾虑吗?

让我们考虑下面的例子。我们有一个具有以下模式的用户(不打算有任何意义):

一方面,如果您有时按组(如“收藏夹和关注者”)查询字段,但对其他字段不感兴趣,则可以在单独的集合中提取这些字段,并进行专门的查询。这里的目的是根据您的用例建模,而不是根据您的真实世界模型

您需要考虑的是“我的收藏所支持的实际用例是什么?”。如果你支持很多人,就把他们分开


另一方面,即使您在不同的字段上进行查询,但始终希望检索整个文档,那么您的集合可能会以一种良好的方式支持您的查询。产生更好性能的一种方法是在经常使用的字段上添加索引(官方文档:)。归根结底,切分可能是您想要的,因为集合非常庞大,它可能与基于任意属性分割记录以及将数据库分发到多台机器上有关。

问题很广泛,但我将尝试列举我想到的内容。如果您可以识别一些重复出现的查询,这意味着您可以识别清晰的用例。例如,如果有时执行(cond1 cond2 cond3)之类的查询,有时执行(cond4 cond5 cond6)之类的查询,则意味着您可以将记录拆分到不同的集合中。当然,一个重要的问题是,您是否总是想要检索完整的文档。如果没有,则表明可能需要拆分记录。我猜,您也尝试添加索引。如果您觉得这不是您的情况(您可以在不同集合中拆分),那么您可能会对切分感兴趣,切分基本上就是在任意键上拆分记录!()@LouisF。我想你的第一句话基本上描述了我需要知道的事情。如果你能详细说明一下,这就是答案。例如,添加索引会比拆分索引好吗?我知道有点宽泛,但你提到的正是我想要的。谢谢。如果你没有任何索引,我会考虑使用索引来产生良好的性能。你必须知道索引是有代价的,你不能索引所有的字段。拆分和索引可能非常适合!
{
"id":123
"posts" : [...],
"favorites" : [...],
"settings" : {},
"followers" : [...],
"email" : "anyEmail@email.com",
"age" : 29
}