首页 > 解决方案 > nodejs + mongodb 连接池

问题描述

我是 mongodb 和 node.js 的新手,对连接池感到困惑。假设代码是这样的:

import mongodb from "mongodb";
const { MongoClient } = mongodb;

const client = new MongoClient("localhost:27017");

async function main() {
  await client.connect();
}

根据驱动文档,MongoClient 的默认连接池大小为 5。

所以每次调用await client.connect();都会创建 1 个到 mongod 的连接,如果我调用await client.connect()6 次,则无法建立第 6 个连接?

标签: node.jsmongodbmern

解决方案


连接池是客户端知道的每个服务器。多次调用 connect 不会让客户端知道更多的服务器,因此不会影响池中的连接数。

另外,客户端每个已知服务器包含一个监控连接,因此在典型的副本集部署中,不执行任何应用程序发出的操作的客户端将有 3 个打开的连接,而不是 1 个。在分片集群中,监控连接的数量是与 mongos 进程的数量相同。

与此类似,如果您要连接到最小连接池大小设置为 5 的 3 节点副本集,则客户端将建立 15 个应用程序连接(每个 RS 节点 5 个)除了 3 个监控连接。


推荐阅读