为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2019-06-23 16:36:26
如何在Node.js Web应用程序中管理MongoDB连接?我用的是节点-MongoDB-本机使用MongoDB编写一个网站的驱动程序。我有一些关于如何管理连接的问题:仅对所有请求只使用一个MongoDB连接就足够了吗?有什么性能问题吗?如果没有,我是否可以设置一个全局连接以便在整个应用程序中使用?如果没有,那么在请求到达时打开一个新连接,在处理请求时关闭它好吗?打开和关闭连接费用昂贵吗?我应该使用全局连接池吗?我听说驱动程序有一个本地连接池。这是个不错的选择吗?如果我使用一个连接池,应该使用多少个连接?还有什么我应该注意的吗?
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

当应用程序启动并重用db对象时,打开do MongoClient.Connection一次。它不是一个单例连接池,每个.CONNECT创建一个新的连接池。

因此,要直接回答您的问题,请重用来自MongoClient.Connection()的db对象。这提供了池,并且与每个db操作上的打开/关闭连接相比,它将提供明显的速度增长。


查看完整回答
反对 回复 2019-06-23
?
撒科打诨

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.});


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 762 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信