Mongoose (модуль node.js) вызывает высокую загрузку процессора
Я использую nodetime, чтобы проанализировать использование центрального процессора моего приложения node.js.
Более 30% использования ЦП приходится на Mongoose:
![enter image description here]()
Следующим крупнейшим виновником, всего лишь 5%, является сборщик мусора.
Я верю Я уже слышал, что 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 в процесс).
Ответы
Ответ 1
С Mongoose важно использовать параметр lean для запросов с большими наборами результатов, где вам не нужно ничего, кроме простого Сами документы JavaScript. Это должно обеспечить производительность, сравнимую с непосредственным использованием собственного драйвера.
Например, в вышеприведенном случае это будет:
this.model.find({$or: or}, fields).lean().exec(function(e, matches) {
// ... excluded for brevity
}).bind(this));