gpt4 book ai didi

node.js - 从单个 Node.js 应用程序打开多个 Mongo 连接是个好主意吗?

转载 作者:IT老高 更新时间:2023-10-28 13:19:56 31 4
gpt4 key购买 nike

背景:我正在尝试优化我的 Node.js API 的速度,该 API 在 Amazon Cloud 上使用 Express 和 Mongoose 构建。我有一个 API 调用需要很长时间才能运行(我的/stats API 调用会编译来自大量来源的数据,因此会进行数百个 mongo 查询,因此运行大约需要 20 秒)。我注意到,当这个 API 调用正在运行时,其他也命中 Mongo 副本集的 API 调用返回缓慢。我的第一个想法是统计查询很慢,因此阻塞,但根据我的统计面板,我没有任何查询需要超过 100 毫秒才能运行,而且我的 Mongo DB 统计数据都在相当健康的范围内(每个查询 20 多个)第二,<1% btree miss,<5% lock)。

问题:现在,我的 Node.js 应用程序在启动时建立到 Mongo 集的单个连接,并且所有查询都使用该连接。建立多个连接会更好吗?例如,我应该为每个入站 API 请求建立一个新的 Mongo 连接吗?或者,也许我应该有一个与副本集的静态连接数,并在执行查询时在这些连接之间进行负载平衡?

或者我完全不在基地?

最佳答案

您绝对应该使用多个连接,否则一次只能执行一个查询。最简洁的方法是在创建 Db 对象时在 mongodb.Server 对象上启用连接池。例如:

var serverOptions = {
'auto_reconnect': true,
'poolSize': 5
};

var mdb = new mongodb.Db('test', new mongodb.Server('127.0.0.1', 27017, serverOptions));
mdb.open(function (err, mdb) { ... }

您没有在统计数据中看到缓慢的查询时间的原因是您的并发查询只是在客户端排队等待连接可用。该等待时间不会显示在服务器端查询时间中。

关于node.js - 从单个 Node.js 应用程序打开多个 Mongo 连接是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12788601/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com