2013-09-06 12 views
45

açmak, böyle bir kod bakın: MongoDB başka bir veritabanı sistemi gibi isetutulması MongoDB kullanmanın pek çok tanıtıcı örneklerde bir MongoDB veritabanı bağlantısı

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

, open ve close operasyonlar genellikle pahalı zaman akıllı olan .

Öyleyse, benim sorum şu: 'u bir kez yapmak yeterli mi, geri döndürülmüş db değerini bazı modüllere global olarak atamak, modülde çeşitli işlevlerle ilgili çeşitli işler yapmak zorunda kalmayın (belgeleri koleksiyonlara ekleyin, güncelleştirin) vb.) diğer uygulama bölümleri tarafından çağrıldıklarında (ve bu nedenle db değerini yeniden kullanın) ve uygulama tamamlandığında, yalnızca close'u yapın. Başka bir deyişle, open ve close diğer bir deyişle, her seferinde gitmeniz gerekmiyor ve veritabanıyla ilgili işlemleri yapın. Ve ilk open\connect sırasında döndürülmüş olan db nesnesini yeniden kullanmaya devam edersiniz, yalnızca veritabanınızla ilgili tüm işleriniz bittiğinde, sonuna kadar close ile imha edin.

Açıkçası, tüm G/Ç eşiği olmadığından, close'dan önce, son veritabanı işleminin close'u göndermeden önce tamamlandığından emin olmalısınız. Bu iyi olmalı gibi görünüyor, ama ben MongoDB için yeni olduğum bir şey eksik olduğumda sadece iki kez kontrol etmek istedim. Teşekkürler!

+0

Ayrıca, burayı kontrol edin (http://stackoverflow.com/questions/14495975/why-its-recommended-not-to-close-any-mongodb-connection-anywhere-in-node-js-code), size yardımcı olabilir –

+0

İlginç .... Evet, yararlı; çok teşekkür ederim! – Lew

cevap

35

Evet, bu iyi ve tipik bir davranış. Uygulamanızı başlatın, db'ye bağlanın, uzun bir süre db'ye karşı işlemler yapın, bağlantı beklenmedik bir şekilde ölürse yeniden bağlanın ve bağlantıyı asla kapatın (yalnızca işleminiz sona erdiğinde otomatik kapanmaya güvenin) .

+1

Ayrıca, düğüm-mongodb-native ile varsayılan olarak 5 havuzlu bağlantı elde edersiniz. [PoolSize] üzerindeki dokümanlara göz atın (http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect-options). – hurrymaplelad

+0

Şüphelerimi onaylamak için çok teşekkürler, Peter - takdir et! – Lew

+0

https://stackoverflow.com/a/24634454/3994271 çözümünü takip ettim ve bu cevapta belirtilenle aynı şeyi yapıyor. Ancak, bağlantı beklenmedik bir şekilde ölürse otomatik olarak nasıl yeniden bağlanabiliriz? – Ayan