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()
对象都支持记录器选项,这是一个具有 log
、error
和 debug
函数的对象。 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 本机驱动程序上启用调试?