【发布时间】:2013-01-19 06:35:08
【问题描述】:
我了解到 Mongoose 每个集合最多只能打开一个连接,并且无法更改此设置。
这是否意味着缓慢的 mongo 查询会使所有后续查询等待?
我知道 node.js 中的所有内容都是非阻塞的,但我想知道慢查询是否会延迟所有后续查询的执行。以及是否有办法改变这一点。
【问题讨论】:
我了解到 Mongoose 每个集合最多只能打开一个连接,并且无法更改此设置。
这是否意味着缓慢的 mongo 查询会使所有后续查询等待?
我知道 node.js 中的所有内容都是非阻塞的,但我想知道慢查询是否会延迟所有后续查询的执行。以及是否有办法改变这一点。
【问题讨论】:
如果您使用执行 mongoose.connect() 的默认方法,它只使用一个连接。为了解决这个问题,您可以创建多个连接,然后将指向同一架构的模型绑定到该连接。
像这样:
var conn = mongoose.createConnection('mongodb://localhost/test');
var conn2 = mongoose.createConnection('mongodb://localhost/test');
var model1 = conn.model('Model', Schema);
var model2 = conn2.model('Model', Schema);
model1.find({long query}, function() {
console.log("this will print out last");
});
model2.find({short query}, function() {
console.log("this will print out first");
});
希望对您有所帮助。
更新 嘿,这确实有效。从 cmets 更新,您可以使用 createConnection 创建连接池。它允许您同时从同一模型执行多个查询:
var conn = mongoose.createConnection('mongodb://localhost/test', {server:{poolSize:2}});
var model = conn.model('Model', Schema);
model.find({long query}, function() {
console.log("this will print out last");
});
model.find({short query}, function() {
console.log("this will print out first");
});
更新 2 -- 2012 年 12 月
这个答案现在可能有点过时了——我注意到我一直在获得支持,所以我想我会更新它。 mongoose 包装的 mongodb-native 驱动程序现在默认连接池大小为 5,因此您可能不需要在 mongoose 中显式指定它。
【讨论】: