2012-04-06 17 views
22

Leo que Mongoose solo abrirá una conexión al máximo por colección, y no hay opción para cambiar esto.¿Mangosta permite múltiples solicitudes de bases de datos al mismo tiempo?

¿Esto significa que una consulta lenta de mongo hará que todas las consultas subsiguientes esperen?

Sé que todo en node.js no es de bloqueo, pero me pregunto si una consulta lenta retrasará la ejecución de todas las consultas posteriores. Y si hay una manera de cambiar esto.

Respuesta

30

Solo usa una conexión, si usa el método predeterminado donde hace mongoose.connect(). Para evitar esto, puede crear conexiones múltiples y luego vincular un modelo que apunta al mismo esquema a esa conexión.

así:

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

Espero que ayude.

Actualización Oye, eso funciona. Actualizando a partir de los comentarios, puede crear un grupo de conexiones usando createConnection. Te permite hacer varias consultas desde el mismo modelo al mismo tiempo:

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

Actualización 2 - Dic 2012
Esta respuesta puede ser un poco anticuado ahora - me di cuenta de que he sido constante para obtener upvotes, por lo Pensé que lo actualizaría. El controlador mongodb-native que mongoose wraps ahora tiene un tamaño de grupo de conexiones predeterminado de 5, por lo que probablemente no necesite especificarlo explícitamente en mongoose.

+0

Entiendo que solo utiliza una conexión, pero ¿qué ocurre cuando uso una sola conexión y una consulta mongodb inmediatamente después de otra consulta pesada de mongodb? ¿La primera consulta que menciono esperará hasta que la segunda consulta que menciono termine su trabajo en mongodb? – alexk

+0

Aha, supongo que me estás diciendo que esperará, y por lo tanto debería usar un modelo diferente. Ya veo, gracias. – alexk

+0

Sí. Si lo prueba con una sola conexión, se imprimirá en el orden en que se solicitó. –

Cuestiones relacionadas