2
在以下代碼中,mongoClient.connect調用(默認情況下)打開一個由5個連接組成的池。由於Node是單線程的,因此只能有一個調用(func1或func2可以隨時處理(第二個調用等待到第一個完成),因此只有池中的五個連接中的一個被使用過Nodejs MongoDB連接池如何工作?
使用Nodejs集羣,如果我們fork多個實例,每個實例打開它自己的連接池(每個實例有5個連接)。
問題是 - MongoDB連接池如何在Node環境中工作。我們如何測試這個來演示同時使用同一池中的多個連接?
mongoClient.connect('mongodb://localhost', function(err, db){
app.get('/func1', function(req, res){
for (var i=0; i<100000; i++){
db.collection('test').insert({a:i});
}
res.end();
});
app.get('/func2', function(req, res){
for (var i=0; i<100000; i++){
db.collection('test').insert({a:i});
}
res.end();
});
});
所以池只能在mongo內部使用,並且不能用於主節點應用程序代碼(因爲節點是單線程的)? – Raj
@Raj不,連接池存在於節點應用程序代碼中,使用多個網絡連接到MongoDB服務器以並行方式異步執行查詢,同時仍然只使用單個線程。 – JohnnyHK
謝謝。 mongodb中是否有任何統計數據告訴我們池中使用的最大連接數?看看我們是否接近允許的最大值,並在需要時將其撞上。 – Raj