2013-09-06 6 views
45

In so vielen einführende Beispiele für die Verwendung MongoDB, sehen Sie Code wie folgt:Keeping öffnen Sie eine MongoDB Datenbankverbindung

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

Wenn MongoDB wie jede andere Datenbanksystem ist, open und close Operationen sind in der Regel teuer zeitweise .

Also, meine Frage ist: Ist OK es einfach einmal die MongoClient.connect("... tun, weisen Sie den zurück db Wert zu einem gewissen Modul global, haben verschiedene Funktionen im Modul tun verschiedene Datenbank-bezogene Arbeit (insert Dokumente in Sammlungen, update Dokumente usw.), wenn sie von anderen Teilen der Anwendung aufgerufen werden (und damit den Wert db wiederverwenden) und dann, wenn die Anwendung fertig ist, erst dann die close.

Mit anderen Worten, open und close sind einmal durchgeführt - nicht jedes Mal, wenn Sie gehen müssen und einige Datenbank-bezogene Operation zu tun. Und Sie verwenden dieses db Objekt, das während der ursprünglichen open\connect zurückgegeben wurde, immer wieder, nur um es am Ende mit der close zu entsorgen, wenn Sie tatsächlich mit all Ihren datenbankbezogenen Arbeiten fertig sind.

Offensichtlich, da alle E/A ist asynch, vor der close Sie würden sicherstellen, dass die letzte Datenbankoperation vor der Ausgabe der close abgeschlossen. Scheint so, als ob das in Ordnung sein sollte, aber ich wollte es nochmal überprüfen, falls ich etwas vermisse, da ich neu bei MongoDB bin. Vielen Dank!

+0

Überprüfen Sie auch [diese] (http://stackoverflow.com/questions/14495975/why-its-recommended-not-to-close-any-mongodb-connection-anywhere-in-node-js-code), kann Ihnen helfen –

+0

Interessant .... Ja, hilfreich; vielen Dank! – Lew

Antwort

35

Ja, das ist in Ordnung und typisches Verhalten. Starten Sie Ihre App, verbinden Sie sich mit db, führen Sie Operationen für die db für eine lange Zeit aus, verbinden Sie sich vielleicht wieder, wenn die Verbindung unerwartet abbricht, und dann schließen Sie die Verbindung einfach nie (verlassen Sie sich auf die automatische Schließung, wenn Ihr Prozess stirbt) .

+1

Außerdem erhalten Sie standardmäßig 5 gepoolte Verbindungen mit node-mongodb-native. Sehen Sie sich die Dokumentation zu [poolSize] an (http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect-options). – hurrymaplelad

+0

Vielen Dank für die Bestätigung meines Verdachts, Peter - schätze es! – Lew

+0

Ich folgte der Lösung https://StackOverflow.com/A/24634454/3994271, die das gleiche tut, wie in dieser Antwort erwähnt. Aber wie können wir die Verbindung automatisch wiederherstellen, wenn die Verbindung jemals unerwartet abbricht? – Ayan