【问题标题】:MongoDB NodeJS driver pooling connection (Question)MongoDB NodeJS 驱动程序池连接(问题)
【发布时间】:2021-06-05 22:14:50
【问题描述】:

我刚刚使用 MongoDB 设置了一个完整的 NodeJS 机器人。这个 Discord 服务器大约有 24,000 人使用命令向机器人左右发送垃圾邮件,我已经使用过

(信息模糊,因为那里有用户名、密码、ips)

"url": "mongodb://XXXX:XXXX@XXX.XX.XXX.XX.XXX:25000/?authSource=admin?maxPoolSize=500&poolSize=300&autoReconnect=true",

这是我的 URI,如您所见,我允许的池大小非常大。

通常情况下,我的应用程序(在启用池之前)的平均连接数会达到 300-600,因为它有多个“MongoDB.Connect(uri) 等”实例,而且数量庞大db.close() 在集合的末尾。

我已经清理了整个事情,我只调用了 MongoClient.Connect() 的 1 个实例,然后在代码中引用了这个连接一次(作为绕过者)。

在我确定清除所有会关闭数据库的东西之后 (db.close();)

我已经启动,一切似乎仍然响应 - 所以没有数据库/mongo 错误。

但是,通过 MongoDB Compass,我的连接数稳定在 29 左右。显然哪个好,但是当我启用 300 个池时,这不应该更高吗?

这就是我的 mongod.cfg 的样子

有什么我错过的吗?还是一切正常?

【问题讨论】:

  • 虽然让它做一些工作(在总共 25.000 个文件中每毫秒更改 100 个文件),但似乎连接数并没有真正转移太多(我们谈论 37 个)。为什么涨的不多?加快进程 - 完成后,连接数保持在 37 而不是下降。
  • serviceExecutor:自适应 - 在 mongod.cfg 中这可能是相关的吗?

标签: node.js mongodb


【解决方案1】:

每个客户端连接到每个服务器一次或两次以进行监视。如果您创建一个执行单个操作的客户端,当该操作针对 4.4 副本集运行时,您有 7 个打开的连接。

通过重用客户端,您可以显着减少总连接数。

此外,预计还会进一步减少,因为您的每个操作都可以更快地完成(不必等待服务器发现)。

【讨论】:

  • 是的,我可以看到它仍然稳定地放置在.. 30~ 24 小时内的连接几乎 - 之前它会达到几百个。速度似乎和以前一样~ish,稳定性似乎不错。所以我会假设我的“池”按预期进行?即使少了几百个缺点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 2013-12-23
  • 1970-01-01
  • 2016-10-22
  • 2014-09-12
相关资源
最近更新 更多