猿问

如何在Node.js Web应用程序中管理MongoDB连接?

如何在Node.js Web应用程序中管理MongoDB连接?

我用的是节点-MongoDB-本机使用MongoDB编写一个网站的驱动程序。

我有一些关于如何管理连接的问题:

  1. 仅对所有请求只使用一个MongoDB连接就足够了吗?有什么性能问题吗?如果没有,我是否可以设置一个全局连接以便在整个应用程序中使用?

  2. 如果没有,那么在请求到达时打开一个新连接,在处理请求时关闭它好吗?打开和关闭连接费用昂贵吗?

  3. 我应该使用全局连接池吗?我听说驱动程序有一个本地连接池。这是个不错的选择吗?

  4. 如果我使用一个连接池,应该使用多少个连接?

  5. 还有什么我应该注意的吗?


慕哥6287543
浏览 806回答 3
3回答

莫回无

当应用程序启动并重用db对象时,打开do MongoClient.Connection一次。它不是一个单例连接池,每个.CONNECT创建一个新的连接池。因此,要直接回答您的问题,请重用来自MongoClient.Connection()的db对象。这提供了池,并且与每个db操作上的打开/关闭连接相比,它将提供明显的速度增长。

撒科打诨

下面是一些管理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;启动服务器时,调用initPoolrequire("mongo-pool").initPool();然后,在任何其他模块中,您可以执行以下操作:var MongoPool = require("mongo-pool");MongoPool.getInstance(function (db){     // Query your MongoDB database.});
随时随地看视频慕课网APP

相关分类

Node.js
MongoDB
我要回答