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

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

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗 獲得超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;
啟動服務(wù)器時,調(diào)用initPool
require("mongo-pool").initPool();
然后,在任何其他模塊中,您可以執(zhí)行以下操作:
var?MongoPool?=?require("mongo-pool");MongoPool.getInstance(function?(db){ ????//?Query?your?MongoDB?database.});
- 3 回答
- 0 關(guān)注
- 854 瀏覽
添加回答
舉報
0/150
提交
取消