2016-05-16 22 views
0

mongoコレクションで30kのユニークなクエリを実行していたPHPアプリケーションがありました。Mongodb数千ものクエリが並行して実行されています

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

詳細を追加できますか? mongoバージョン、使用されたストレージエンジン、およびこのクエリの統計情報を含むダンプを説明しますか? – profesor79

+1

これを管理するには、[async'](https://github.com/caolan/async)のような非同期フロー制御ライブラリを使用します。 – JohnnyHK

+0

@ JohnnyHK、実装サンプルを提供できますか?タイ –

答えて

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); 
}); 
関連する問題