2013-09-06 37 views
45

na tak wiele wprowadzających przykładami zastosowania MongoDB, widzisz kodu:Prowadzenie otworzyć połączenie z bazą danych MongoDB

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

Jeśli MongoDB jest jak każdy inny system bazy danych, open i close operacje są zazwyczaj kosztowne czas mądry .

Więc moje pytanie brzmi: czy jest to OK, aby po prostu zrobić MongoClient.connect("... raz przypisać zwracanej wartości do jakiegoś modułu globalnego db, mają różne funkcje w module wykonać różne prace związane z bazą danych, (dokumenty wstawić do zbiorów, aktualizacja dokumenty itp.), gdy są wywoływane przez inne części aplikacji (i tym samym ponownie używają tej wartości db), a następnie, gdy aplikacja zostanie wykonana, dopiero wtedy wykonaj close.

Innymi słowy, open i close są wykonywane raz - nie za każdym razem, gdy trzeba przejść i wykonać operację związaną z bazą danych. I ponownie używasz tego obiektu db, który został zwrócony podczas początkowego open\connect, tylko po to, aby się go pozbyć na końcu, z close, kiedy faktycznie skończysz z całą pracą związaną z bazą danych.

Oczywiście, ponieważ wszystkie operacje wejścia/wyjścia są asynchroniczne, przed close należy upewnić się, że ostatnia operacja bazy danych została zakończona przed wydaniem close. Wygląda na to, że powinno być OK, ale chciałem dokładnie sprawdzić, na wypadek, gdy czegoś mi brakuje, ponieważ jestem nowy w MongoDB. Dzięki!

+0

Sprawdź również [to] (http://stackoverflow.com/questions/14495975/whyi-its-recommended-not-to-close-any-mongodb-connection-anywhere-in-node-js-code), może ci pomóc –

+0

Interesujące ... Tak, pomocne; Dziękuję Ci bardzo! – Lew

Odpowiedz

35

Tak, to jest dobre i typowe zachowanie. uruchom swoją aplikację, połącz się z db, wykonuj operacje na bazie przez długi czas, może ponownie podłącz się, jeśli połączenie niespodziewanie zginie, a następnie nigdy nie zamykaj połączenia (po prostu polegaj na automatycznym zamykaniu, które ma miejsce, gdy twój proces umiera) .

+1

Ponadto domyślnie uzyskuje się 5 połączeń z węzłem node-mongodb-native. Sprawdź dokumentację [poolSize] (http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect-options). – hurrymaplelad

+0

Wielkie dzięki za potwierdzenie moich podejrzeń, Peter - doceń to! – Lew

+0

Podążyłem za rozwiązaniem https://stackoverflow.com/a/24634454/3994271, które robi to samo, co wspomniano w tej odpowiedzi. Ale jak możemy automatycznie połączyć się ponownie, jeśli połączenie niespodziewanie zginie? – Ayan

Powiązane problemy