Mongodb数千个并行运行的查询

Mongodb thousands of queries running in parallel

本文关键字:并行 运行 查询 千个 Mongodb      更新时间:2023-09-26

我们有一个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);
});