Mongodb数千个并行运行的查询
Mongodb thousands of queries running in parallel
我们有一个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运行这些查询的优势?
正如JohnnyHK所提到的,您可以使用async,特别是mapLimit。
我不知道PHP,所以这里有一个伪/粗略的猜测,它在node中的等效语法。
// 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);
});
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何使用JS/nightwatchjs并行运行多个测试
- Mongodb数千个并行运行的查询
- 如何在并行选项卡中运行彗星聊天
- 如何一个接一个地运行javascript超时,而不是并行运行
- 并行运行 npm 任务
- 节点服务器和 WS 服务器并行运行
- 并行运行异步任务
- 如果一个并行函数已经失败,阻止该函数继续运行(使用jQuery $.when())
- 如何从调用堆栈中删除函数并并行运行它
- 两个并行运行的异步函数都完成执行的Catch时刻
- 并行运行承诺,但单独处理拒绝
- 不能并行运行Selenium PhantomJS实例
- 如何并行运行所有功能
- 调试承诺的最佳方式是并行运行
- 停止并行运行的异步任务
- 并行执行多个AJAX请求,并在所有请求完成后运行一个函数
- 并行运行异步代码
- 多个Javascript并行运行