【发布时间】:2016-04-14 18:53:35
【问题描述】:
假设我有一个包含这样文档的集合:
{
category_id : 5
data : (some data)
(more data...)
}
我有 15 个类别,每个类别有 100 万条记录。因此,我在这个集合中有 1500 万个文档。
我不做非常复杂的查询。大多数情况下,我通过以下方式从 n 类中获取一些文件:
db.collection.find({category_id: n, (some other conditions) })
我想知道是否最好将此主集合拆分为 15 个集合,以便每个集合仅包含属于某个类别的文档。然后我不需要在查询中指定category_id,而是使用该类别的相应集合:
db.collection.find({ (some conditions) })
这是否会使查询速度更快并且有任何顾虑?
【问题讨论】:
-
这个问题很广泛,但我会尝试列举我想到的。如果您可以识别出一些经常性的查询,则意味着您可以识别出清晰的用例。例如,如果您有时执行诸如 (cond1 cond2 cond3) 之类的查询,有时执行诸如 (cond4 cond5 cond6) 之类的查询,这意味着您可以将记录拆分到不同的集合中。当然,一个重要的问题是您是否总是想检索完整的文档。如果不是,则表明可能需要拆分您的记录。我猜,您也尝试添加索引。
-
如果您不认为这是您的情况(事实上您可以拆分为不同的集合),那么您可能会对分片感兴趣,这基本上是在任意键上拆分您的记录! (docs.mongodb.org/manual/sharding)
-
@LouisF。我认为您的第一条评论几乎描述了我需要知道的内容。如果你能详细说明一下,那就是答案。例如,添加索引会比拆分更好吗?我知道它有点宽泛,但你提到的正是我想要的。谢谢。
-
如果您没有任何索引,我会考虑使用索引来产生良好的性能。你必须知道索引是有代价的,你不能索引所有的字段。拆分和索引可能很合适!
标签: mongodb