加快MongoDB查询速度

时间:2012-10-03 05:15:08

标签: mongodb

我正在做一些剖析&优化我的MongoDB服务器,并发现99%的慢查询(大约100毫秒,每个Database Profiler)是由于我的node.js代码中的单个查询。

首先,这是我如何建模我的缓存(通过猫鼬):

{
                    '_id':                      { type: String, unique: true},
                    'group':                    { type: String, index: true },
                    'post_time_msec':           { type: Number, index: true },
                    'stream_type':              { type: String },
                    'stream_name':              { type: String },
                    'stream_id':                { type: String },
                    'stream_key':               { type: String },
                    'last_updated':             { type: Date },
                    'data':                     {},
                    'bookmarks':                { type: Number },
                }

现在,我的查询很慢。 我寻找属于某个“组”字段的对象。也就是说,我想找到组中所有对象的“post_time_msec”,这样我就可以判断是否需要更新这些对象。

node.js和mongo中的查询如下所示:

var thegroup = ... // this is set earlier
model.find({'group': thegroup}, {'_id': true, 'post_time_msec': true}, {'limit': 300, 'sort': {'post_time_msec': -1}});

我还经常清理集合,当属于某个组的集合中有超过300个时删除额外的对象(这样,查询不应该查看数千条记录......)

当我查看mongo分析器时,这是一个慢慢运行的查询示例:

{ "ts" : ISODate("2012-10-03T05:00:29.802Z"), "op" : "query", "ns" : "streamified.postcaches", "query" : { "query" : { "group" : "network/group/2934jq98239oeu1" }, "orderby" : { "post_time_msec" : -1 } }, "ntoreturn" : 300, "nscanned" : 305, "scanAndOrder" : true, "nreturned" : 300, "responseLength" : 31520, "millis" : 985, "client" : "10.179.35.87", "user" : "" }

正如您所看到的,此查询需要将近1秒钟才能完成。它只扫描了305行,只返回了2个字段,所有查询字段都被编入索引。

我错过了什么吗?

0 个答案:

没有答案