Mongodb并行运行数千个查询

时间:2016-05-16 13:54:01

标签: javascript node.js mongodb concurrency

我们有一个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继续运行这些查询?

1 个答案:

答案 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);
});