我特别需要在MongoDB集合中拥有特别多的稀疏索引。这个数字可能会低至数千。存储的文件每个只使用相对少量的索引,平均每个约10-30个。但是,文档变化很大,每个文档都需要不同的索引。
我找不到任何有关>的可能影响的文件。集合上的1000个稀疏索引。空间不是问题。我特别关注的是对保存时间和查询设置的影响。 MongoDB会因为这么大的开销而陷入困境吗?
我将运行自己的基准测试,但我想知道a)如果有人知道关于此的一些官方指南,并且b)对此方案有任何经验。
答案 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以使结果非常快。