6

我正在使用 nodetime 来分析我的 node.js 应用程序的高 CPU 使用率。超过 30% 的 CPU 使用率来自 Mongoose:

在此处输入图像描述

下一个最大的罪魁祸首是垃圾收集器,仅占 5%。

相信我之前听说过 Mongoose 会导致 CPU 使用率过高,最好跳过它并直接使用 Mongo 驱动程序。这是准确的吗?

这是“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));
};

我还能如何加速这个热点?

请注意,正如您所见,不是查询需要很长时间,而是 Mongo 驱动程序需要很长时间来处理结果(并且在此过程中消耗大量 CPU)。

4

1 回答 1

17

对于 Mongoose,对于具有大型结果集的查询使用精益选项很重要,在这些查询中,除了纯 JavaScript 文档本身之外不需要任何东西。这应该提供与直接使用本机驱动程序相当的性能。

例如,在上述情况下,它将是:

this.model.find({$or: or}, fields).lean().exec(function(e, matches) {
    // ... excluded for brevity
}).bind(this));
于 2013-02-26T19:29:35.367 回答