Mongoose(node.js模块)导致高CPU使用率
问题描述:
我正在使用nodetime来分析node.js应用程序的高CPU使用率。 CPU使用率的 超过30%是从猫鼬来:Mongoose(node.js模块)导致高CPU使用率
下一个最大的罪魁祸首,在仅5%,是垃圾收集器。
我相信我以前听说过,那猫鼬会导致CPU使用率很高,而且它可以是最好跳过它,直接使用蒙戈驱动程序。这是否准确?
这里的“Geocode.decodeMnay”功能,触发此特定热点...
Geocode.prototype.decodeMany = function(strs, callback)
{
var or = [],
map = {},
fields = {'woeid': 1, 'matched_queries': 1, 'latitude': 1, 'longitude': 1, 'radius': 1, 'name': 1},
unique = [];
strs = _.uniq(strs);
for(var k=0; k<strs.length; k++)
or.push({'matched_queries':strs[k].trim()});
this.model.find({$or: or}, fields, (function(e,matches){
// ... excluded for brevity
}).bind(this));
};
我否则怎么可能会加快这一热点?
note它不是查询需要很长时间,正如您所看到的,而是需要很长时间来处理结果(并且在进程中消耗大量CPU)的Mongo驱动程序。
答
在Mongoose中,对于具有大型结果集的查询使用lean选项非常重要,因为除非是普通的JavaScript文档本身,否则不需要其他任何内容。这应该提供与直接使用本地驱动程序相当的性能。
例如,在上述情况下这将是:
this.model.find({$or: or}, fields).lean().exec(function(e, matches) {
// ... excluded for brevity
}).bind(this));
我不知道如何我的文档中错过了这个。谢谢! – 2013-02-26 19:52:31
在大型查找查询中使用lean()将执行时间减少了70-80%,并消除了100%的CPU峰值。非常有用的选项,我希望我早点知道! – 2013-07-29 17:35:08