nodetime を使用して、node.js アプリの高い CPU 使用率を分析しています。CPU 使用率の 30% 以上が Mongoose によるものです。
次の最大の原因は、わずか 5% のガベージ コレクターです。
Mongooseは CPU 使用率が高くなる可能性があり、Mongoose をスキップして直接 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 を消費している) ことに注意してください。