如何在Node.js Web應用程序中管理MongoDB連接?我用的是節點-MongoDB-本機使用MongoDB編寫一個網站的驅動程序。我有一些關于如何管理連接的問題:僅對所有請求只使用一個MongoDB連接就足夠了嗎?有什么性能問題嗎?如果沒有,我是否可以設置一個全局連接以便在整個應用程序中使用?如果沒有,那么在請求到達時打開一個新連接,在處理請求時關閉它好嗎?打開和關閉連接費用昂貴嗎?我應該使用全局連接池嗎?我聽說驅動程序有一個本地連接池。這是個不錯的選擇嗎?如果我使用一個連接池,應該使用多少個連接?還有什么我應該注意的嗎?
3 回答

莫回無
TA貢獻1865條經驗 獲得超7個贊
當應用程序啟動并重用db對象時,打開do MongoClient.Connection一次。它不是一個單例連接池,每個.CONNECT創建一個新的連接池。
因此,要直接回答您的問題,請重用來自MongoClient.Connection()的db對象。這提供了池,并且與每個db操作上的打開/關閉連接相比,它將提供明顯的速度增長。

撒科打諢
TA貢獻1934條經驗 獲得超2個贊
下面是一些管理MongoDB連接的代碼。
var?MongoClient?=?require('mongodb').MongoClient;var?url?=?require("../config.json")["MongoDBURL"]var?option?=?{ ??db:{ ????numberOfRetries?:?5 ??}, ??server:?{ ????auto_reconnect:?true, ????poolSize?:?40, ????socketOptions:?{ ????????connectTimeoutMS:?500 ????} ??}, ??replSet:?{}, ??mongos:?{}};function?MongoPool(){}var?p_db;function?initPool(cb){ ??MongoClient.connect(url,?option,?function(err,?db)?{ ????if?(err)?throw?err; ????p_db?=?db; ????if(cb?&&?typeof(cb)?==?'function') ????????cb(p_db); ??}); ??return?MongoPool;}MongoPool.initPool?=?initPool;function?getInstance(cb){ ??if(!p_db){ ????initPool(cb) ??} ??else{ ????if(cb?&&?typeof(cb)?==?'function') ??????cb(p_db); ??}}MongoPool.getInstance?=?getInstance;module.exports?=?MongoPool;
啟動服務器時,調用initPool
require("mongo-pool").initPool();
然后,在任何其他模塊中,您可以執行以下操作:
var?MongoPool?=?require("mongo-pool");MongoPool.getInstance(function?(db){ ????//?Query?your?MongoDB?database.});
- 3 回答
- 0 關注
- 847 瀏覽
添加回答
舉報
0/150
提交
取消