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

Zan*_*aes 7 mongoose mongodb node.js

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

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

或者我可能完全偏离基地?

Joh*_*yHK 12

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

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) { ... }
Run Code Online (Sandbox Code Playgroud)

您没有在统计信息中看到查询时间慢的原因是您的并发查询只是在客户端排队等待连接变得可用.等待时间不会出现在服务器端查询时间中.