我们最近为我们的一个主要系列收录了> 2百万条记录,现在我们开始对该系列的主要性能问题感到不满。
它们在集合中的文档有大约8个字段,您可以使用UI过滤,结果应该按记录处理的时间戳字段排序。
我已经添加了几个复合索引与过滤的字段和时间戳
例如:
db.events.ensureIndex({somefield: 1, timestamp:-1})
我也添加了几个索引,同时使用几个过滤器,希望实现更好的性能。但一些过滤器仍然需要很长的时间来执行。
我确保使用解释查询确实使用我创建的索引,但性能仍然不够好。
我想知道如果分片是现在的方式去,但我们很快就会开始有每天约100万新的记录在该集合..所以我不知道如果它会扩展好..
编辑:查询的示例:
> db.audit.find({'userAgent.deviceType': 'MOBILE', 'user.userName': {$in: [[email protected]']}}).sort({timestamp: -1}).limit(25).explain()
{
"cursor" : "BtreeCursor user.userName_1_timestamp_-1",
"isMultiKey" : false,
"n" : 0,
"nscannedObjects" : 30060,
"nscanned" : 30060,
"nscannedObjectsAllPlans" : 120241,
"nscan