2016-05-16 35 views
0

我們有一個PHP應用程序,運行得很好,在mongo集合中運行30k個獨特的查詢。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); 
});