2012-04-06 16 views
22

私は、Mongooseはコレクションごとに最大1つの接続しか開きませんが、これを変更するオプションはありません。mongooseは複数のデータベース要求を同時に許可しますか?

これは、遅いモンゴークエリがすべての後続クエリを待つことを意味しますか?

私はNode.jsの中にすべてが非ブロックですけど、私はスロークエリは、後続のすべてのクエリの実行を遅らせるだろうかどうか迷っています。そして、これを変える方法があるかどうか。

答えて

30

あなたは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を使用して接続プールを作成できます。そう、私はupvotesを取得し続けてきた気づいた - 2012
この答えは、今少し時代遅れかもしれ12月 - 2

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

更新:それはあなたが同時に同じモデルから複数のクエリを行うことができます私はそれを更新すると思った。 mongooseがラップするmongodb-nativeドライバは、デフォルトの接続プールサイズが5であるため、おそらく明示的にそれをmongooseで指定する必要はありません。

+0

私は1つの接続しか使用しないと理解していますが、1つの接続を使用し、mongodbクエリがすぐに別の重いmongodbクエリをたどるとどうなりますか?私が言及する最初のクエリは、私が言及する2番目のクエリがmongodbでの作業を終了するまで待ちますか? – alexk

+0

ああ、私はそれが待っていると言っていると思いますので、私は別のモデルを使用する必要があります。私は、ありがとう。 – alexk

+0

1つの接続で試してみると、クエリされた順序で印刷されます。 –

関連する問題