我正在使用带有 ruby (1.9.3) 应用程序的 MongoDB 2.0.3(通过 Mongoid)。
我有一个看起来像这样的复合索引:
index [
[:attr1, Mongo::ASCENDING],
[:attr2, Mongo::ASCENDING],
[:attr3, Mongo::ASCENDING],
[:attr4, Mongo::ASCENDING]
]
一个看起来像这样的查询:
Model.where(:attr3.ne => true, :attr4.ne => true).
extras(:hint => { :attr1 => Mongo::ASCENDING,
:attr2 => Mongo::ASCENDING,
:attr3 => Mongo::ASCENDING,
:attr4 => Mongo::ASCENDING })
然后我的代码修改结果并更新它们。我有几个运行上述 ruby 应用程序的进程,所有进程都在保存 mongodb 服务器。我有一个相当大的数据库(超过 3000 万条记录,大小为 95gb),并且我的应用程序不断地对其进行读取/写入。
我看到一个问题,有时查询会使用索引,有时不会(通过 mongo shell 的 db.currentOp() )。为什么会发生这种情况,我该如何解决?