2012-04-06 16 views
22

Ho letto che Mongoose aprirà solo una connessione al massimo per raccolta e non è possibile modificarlo.La mangusta consente più richieste di database contemporaneamente?

Ciò significa che una query mongo lenta attenderà tutte le query successive?

So che tutto in node.js non è bloccante, ma mi chiedo se una query lenta ritarderà l'esecuzione di tutte le query successive. E se c'è un modo per cambiare questo.

risposta

30

Utilizza solo una connessione, se si utilizza il metodo predefinito in cui si esegue mongoose.connect(). Per aggirare questo problema, è possibile creare più connessioni e quindi collegare un modello che punta allo stesso schema per quella connessione.

Come così:

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

Speranza che aiuta.

Aggiornamento Ehi, questo funziona. Aggiornamento dai commenti, è possibile creare un pool di connessioni utilizzando createConnection. Ti permette di fare più query dallo stesso modello in concomitanza:

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

Update 2 - dicembre 2012
Questa risposta può essere un po 'datato ora - ho notato che ho continuando a ottenere upvotes, così Ho pensato di aggiornarlo. Il driver mongodb nativo che gli involucri di mangusta hanno ora una dimensione di pool di connessione predefinita di 5, quindi probabilmente non è necessario specificarlo esplicitamente in mangusta.

+0

Capisco che usi una sola connessione, ma cosa succede quando uso una sola connessione e una query di mongodb segue immediatamente un'altra pesante query di mongodb? La prima query che ho menzionato aspetterà fino a quando la seconda query che ho menzionato non terminerà il suo lavoro su mongodb? – alexk

+0

Aha, immagino che mi stai dicendo che aspetterà, e quindi dovrei usare un modello diverso. Vedo, grazie. – alexk

+0

Sì. Se lo provi con una sola connessione, stamperanno nell'ordine richiesto. –

Problemi correlati