node.js如何配置mongodb连接池?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js如何配置mongodb连接池?相关的知识,希望对你有一定的参考价值。

使用node-mongodb-native,这是官方为nodejs提供的驱
动。这个库本本身就实现了pool管理,所以不用另外考虑连接池。使用上可以通过配置链接url或server的属性设置连接池大小。可以在程序初始化时
创建一个全局的访问client,也可以自己再封装一次。所有通过这个client的发出的mongo操作请求,驱动底层都会自动分配链接。由于底层是用
c/c++实现的,所以不用担心代码会阻塞。具体如何创建可以参见http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect

仅供参考~
参考技术A 使用node-mongodb-native驱动,在配置选项中就可以设置连接池选项

var publicdbtoptions = db: ,
server: poolSize: 5 , auto_reconnect:true ,
replSet: ,
mongos:

;
// Initialize connection once
MongoClient.connect(dbUrl,publicdbtoptions ,function(err, database)
if(err) throw err;
dbs.publicdb = database ;
console.info(dbUrl + " open OK publicdb");
//
);本回答被提问者采纳

如何在 node.js 和 mongoDB 本机驱动程序上启用调试?

【中文标题】如何在 node.js 和 mongoDB 本机驱动程序上启用调试?【英文标题】:how to enable debug on node.js and mongoDB native driver? 【发布时间】:2012-09-23 10:15:37 【问题描述】:

我使用带有连接池的 node.js 和 node-mongodb-native 驱动程序。有没有办法启用调试以查看发生了什么、有多少连接处于活动状态以及连接何时打开或关闭?

我想看到类似的东西:

* 连接 xxx 在主机上打开:端口 * 连接 yyy 在主机上打开:端口 * 连接 xxx 关闭

【问题讨论】:

【参考方案1】:

Db()Server() 对象都支持记录器选项,这是一个具有 logerrordebug 函数的对象。 Db() 选项目前似乎没有记录,但在 0.9.6-20 2011-10-04 changelog entry 中提到。

我不确定此界面是否支持您需要的所有信息,但这绝对是一个不错的起点。驱动程序团队也可能会欢迎添加此类功能的拉取请求。

【讨论】:

谢谢,我修改了connection.js来记录连接并在github上拉了一个请求 你是如何做到这一点的?我传递了一个对象,该对象支持那些应该登录到控制台的方法,但我没有看到蹲着。 如果有帮助,拉取请求是:github.com/mongodb/node-mongodb-native/pull/765【参考方案2】:

可以使用节点的驱动Logger类:

import  Logger  from "mongodriver";

稍后在您的代码中:

Logger.setLevel("debug");

您可以在the official driver API doc 上查看文档

【讨论】:

【参考方案3】:
    要查看发送到 MongoDB 的命令,请将 driver logger's 级别设置为 debug。 要对connection pool events 做出反应,只需订阅它们并自己登录即可。 您可能需要topology monitoring 对拓扑变化做出反应,例如加入辅助节点或与副本集断开连接。
const client = new MongoClient('mongodb://127.0.0.1:27017/', 
  useUnifiedTopology: true,
  loggerLevel: 'debug',
  // logger: (message, context) => console.dir(context),
)

// connection pool monitoring
client.on('connectionPoolCreated', event => console.dir(event))
client.on('connectionPoolClosed', event => console.dir(event))
client.on('connectionCreated', event => console.dir(event))
client.on('connectionReady', event => console.dir(event))
client.on('connectionClosed', event => console.dir(event))
client.on('connectionCheckOutStarted', event => console.dir(event))
client.on('connectionCheckOutFailed', event => console.dir(event))
client.on('connectionCheckedOut', event => console.dir(event))
client.on('connectionCheckedIn', event => console.dir(event))
client.on('connectionPoolCleared', event => console.dir(event))

// topology monitoring
client.on('serverDescriptionChanged', event => console.dir(event))
client.on('serverHeartbeatStarted', event => console.dir(event))
client.on('serverHeartbeatSucceeded', event => console.dir(event))
client.on('serverHeartbeatFailed', event => console.dir(event))
client.on('serverOpening', event => console.dir(event))
client.on('serverClosed', event => console.dir(event))
client.on('topologyOpening', event => console.dir(event))
client.on('topologyClosed', event => console.dir(event))
client.on('topologyDescriptionChanged', event => console.dir(event))

【讨论】:

以上是关于node.js如何配置mongodb连接池?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 和 mongoDB 本机驱动程序上启用调试?

如何在 Node js 中承诺一个 mysql 池连接?

如何在 node.js 中重用 mongodb 连接

如何在 node.js 中的模块之间共享连接池?

如何在 node.js 断开连接期间缓冲 MongoDB 插入?

如何使用 mongoose 将本地 mongodb 与 node.js 应用程序连接?