2013-09-06 11 views
45

In tanti esempi introduttivi di utilizzare MongoDB, si vede il codice come questo:tenere aperta una connessione al database MongoDB

var MongoClient = require('mongodb').MongoClient; 
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db) 
{ 
    /* Some operation... CRUD, etc. */ 
    db.close(); 
}); 

Se MongoDB è come qualsiasi altro sistema di database, open e close operazioni sono in genere costosi tempo-saggio .

Quindi, la mia domanda è questa: E 'OK per fare semplicemente il MongoClient.connect("... una volta, assegnare il tornata db valore da qualche modulo globale, hanno diverse funzioni nel modulo fare vari lavori relative al database (documenti di inserimento in raccolte, aggiornamento documenti, ecc. ecc.) quando vengono chiamati da altre parti dell'applicazione (e quindi riutilizzano il valore db), e quindi, quando l'applicazione viene eseguita, solo allora eseguono il close.

In altre parole, open e close vengono eseguiti una sola volta, non ogni volta che è necessario eseguire un'operazione relativa al database. E continui a riutilizzare l'oggetto db che è stato restituito durante l'iniziale open\connect, per poi eliminarlo alla fine, con lo close, quando hai finito con tutte le attività relative al database.

Ovviamente, poiché tutto l'I/O è asincrono, prima dello close è necessario assicurarsi che l'ultima operazione di database completata prima di emettere il close. Sembra che questo dovrebbe essere OK, ma volevo ricontrollare nel caso in cui mi manchi qualcosa mentre sono nuovo in MongoDB. Grazie!

+0

Controllare anche [questo] (http://stackoverflow.com/questions/14495975/why-its-recommended-not-to-close-any-mongodb-connection-anywhere-in-node-js-code), potrebbe aiutarti –

+0

Interessante .... Sì, utile; Grazie mille! – Lew

risposta

35

Sì, è un comportamento normale e tipico. avvia la tua app, connettiti a db, fai operazioni contro il db per un lungo periodo, magari riconnettiti se la connessione muore inaspettatamente e poi non chiudi mai la connessione (fai affidamento solo sulla chiusura automatica che si verifica quando il tuo processo muore) .

+1

Inoltre, si ottengono 5 connessioni in pool per impostazione predefinita con node-mongodb-native. Dai un'occhiata ai documenti su [poolSize] (http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect-options). – hurrymaplelad

+0

Grazie mille per aver confermato i miei sospetti, Peter - apprezzalo! – Lew

+0

Ho seguito la soluzione https://stackoverflow.com/a/24634454/3994271 che fa la stessa cosa menzionata in questa risposta. Ma come possiamo riconnetterci automaticamente se la connessione muore inaspettatamente? – Ayan

Problemi correlati