MongoDB限制稀疏索引的数量

时间:2012-07-07 16:41:43

标签: mongodb indexing mongodb-query

我特别需要在MongoDB集合中拥有特别多的稀疏索引。这个数字可能会低至数千。存储的文件每个只使用相对少量的索引,平均每个约10-30个。但是,文档变化很大,每个文档都需要不同的索引。

我找不到任何有关>的可能影响的文件。集合上的1000个稀疏索引。空间不是问题。我特别关注的是对保存时间和查询设置的影响。 MongoDB会因为这么大的开销而陷入困境吗?

我将运行自己的基准测试,但我想知道a)如果有人知道关于此的一些官方指南,并且b)对此方案有任何经验。

2 个答案:

答案 0 :(得分:1)

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

解除此限制

插入将添加一些开销,但一旦实现您插入的文档不需要添加到大多数索引,它应该“快速失败”。免责声明:我没有尝试过几乎和你考虑的一样多的基准测试。我很想知道它是否有用。

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

答案 1 :(得分: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的完整对象。

注意:通过在查询查询中仅检索_id字段,Mongo可以从索引中返回结果,并且无需解压缩任何BSON以使结果非常快。