我们有一个PHP应用程序,它在mongo集合中运行良好的30k个独特查询。
foreach ($request->numbers as $number) {
$query = [
'cn' => $ddd,
'prefix_init' => array('$lte' => (int) $mobile),
'prefix_final' => array('$gte' => (int) $mobile)
];
$result = $cadup_full->findOne($query);
$results[] = $result;
}
我们在nodejs中转换了该应用程序并开始出现性能问题,因为PHP查询是以同步方式触发的,而nodejs循环使所有30k运行同时导致性能下降。
如何使用nodejs继续运行这些查询?
答案 0 :(得分:2)
正如JohnnyHK所提到的,你可以使用async,特别是mapLimit。
我不知道PHP,所以这里有一个伪/粗略猜测它在节点中的等效语法。
// max number of requests running at once
let concurrencyLimit = 10;
async.mapLimit(numbers, concurrencyLimit, function(number, numberCallback) {
let query = {
"cn": ddd,
"prefix_init": {
$lte: number
},
"prefix_final": {
$gte: number
}
}
// where numberCallback is function(error, document);
myCollection.findOne(query, numberCallback);
}, function(error, results) {
// here is your results array;
console.log(results);
});