1

我特别需要在 MongoDB 集合中拥有特别大量的稀疏索引。这个数字可能只有几千。每个存储的文档将只使用相对较少的索引,平均每个大约 10 到 30 个。但是,这些文档种类繁多,并且每个都需要不同的索引集。

我找不到任何关于在集合上拥有 > 1000 个稀疏索引的可能影响的文档。空间不是问题。我特别关心的是对节省时间和查询设置的影响。MongoDB 会因如此大的开销而陷入困境吗?

我将运行我自己的基准测试,但我想知道 a) 是否有人知道这方面的一些官方指导方针,并且 b) 对这种情况有任何经验。

4

2 回答 2

1

在服务器中实现之前,您可以运行两次 OR 查询 - 每个字段一次并在客户端合并结果。

例如,如果您有对象:

{_id: 123, foo: 12}
{_id: 124, bar: 13}
{_id: 124, foo: 12, bar: 15}

您可以拥有一个稀疏索引{foo:1, _id:1}和另一个稀疏索引,{bar:1, _id:1}然后执行查询find({foo:12}, {_id:1})find({bar:13}, {_id:1})然后执行 OR 或 AND 客户端中的对象 ID。然后,您可以仅检索那些匹配 ID 的完整对象。

注意:通过只检索_idfind 查询中的字段,Mongo 可以从索引中返回结果,并且不需要解压任何 BSON 来提供结果,这使得这非常快。

于 2013-01-21T10:55:52.370 回答
1

您可能会遇到命名空间限制(索引、集合的总数等),但可以使用 --nssize 解除限制:http ://www.mongodb.org/display/DOCS/Using+a+大+数量+个+集合

插入会增加一些开销,但一旦意识到您插入的文档不需要添加到大多数索引中,它应该“快速失败”。免责声明:我没有尝试过您考虑的基准测试。我有兴趣看看它是否会起作用。

要记住的一件事是,如果不使用 $or,您将无法在每个查询中使用多个索引,这是 mongodb 中的当前限制。http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Oneindexperquery

于 2012-07-07T17:14:03.870 回答