如何在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 关注
- 805 浏览
添加回答
举报
0/150
提交
取消