24

私は、Mongooseがコレクションごとに最大で1つの接続のみを開くことを読みました。これを変更するオプションはありません。

これは、mongoクエリが遅いと、後続のすべてのクエリが待機することを意味しますか?

node.jsのすべてが非ブロッキングであることは知っていますが、遅いクエリが後続のすべてのクエリの実行を遅らせるかどうか疑問に思っています。そして、これを変える方法があるかどうか。

4

1 に答える 1

31

mongoose.connect()を実行するデフォルトのメソッドを使用する場合、1つの接続のみを使用します。これを回避するには、複数の接続を作成してから、同じスキーマを指すモデルをその接続に結び付けることができます。

そのようです:

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");
});

お役に立てば幸いです。

更新 ねえ、それは動作します。コメントから更新すると、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ネイティブドライバーのデフォルトの接続プールサイズは5になっているため、mongooseで明示的に指定する必要はおそらくありません。

于 2012-04-06T06:17:20.910 に答える