2012-04-18 24 views
6

MongoJS, Node'da yerel Mongo sürücüsü için bir sarıcı olarak kullanılmaya çalışıyorum. Koleksiyonumdaki belgeleri, populate(), save(), vb gibi yöntemlerle JavaScript sınıfları olarak modelleme yapıyorum.MongoJS ile Mongo'ya bağlantıları yönetmenin doğru yolu nedir?

C# ve Java gibi birçok dilde, her sorgu için açıkça bağlanır ve sonra bağlantı kesilir. Çoğu örnek sadece bağlantıya bir örnek verir, ancak yapıldığında bağlantıyı asla kapatmaz. Şoförün bunu kendi başına yönetebiliyor mu yoksa kendim elle yapmam gerekip gerekmediğine emin değilim. Belgeler seyrek.

User.prototype.populate = function(callback) { 
    var that = this;  

    this.db = mongo.connect("DuxDB"); 
    this.db.collection(dbName).findOne({email : that.email}, function(err, doc){ 
     if(!err && doc) { 
      that.firstName = doc.firstName; 
      that.lastName = doc.lastName; 
      that.password = doc.password; 
     } 

     if (typeof(callback) === "function"){ 
      callback.call(that); 
     } 

     that.db.close(); 
    }); 
}; 

Ben en kısa MongoJS nesne üzerinde close() yöntemini çağırın, ben artık müteakip çağrılarda yeni bir bağlantı açabilirsiniz buluyorum:

İlgili kod İşte. Ancak, bu yöntemi çağırmazsam, Düğüm işlemi, tüm çağrışma çağrıları tamamlandıktan sonra, Mongo'yu kesmeyi bekliyormuş gibi, hiçbir zaman sona ermez.

MongoJS ile Mongo'ya bağlantıları yönetmenin doğru yolu nedir?

cevap

7

Bağlantıyı koparmak yerine bağlantıyı açık bırakırsanız, uygulamanızdan daha iyi performans alırsınız. Bir TCP bağlantısı yapmak ve MongoDB durumunda, uygun olduğunda çoğaltma seti/kodlama yapılandırmasını keşfetmek, gerçekte sorguları ve güncellemeleri işlerken geçirilen süreye kıyasla nispeten pahalıdır. Bu kez bir kez "harcanmak" ve bu işi sürekli tekrarlamaktan ziyade bağlantıyı açık tutmak daha iyidir.

+2

Anlam ifade eder. Nesneye artık ihtiyacım olmadığında bağlantıyı kapatmak için uygun bir zaman var mı (bir çeşit yıkıcı)? Veya JavaScript çöpü MongoJS nesnesine referans topladığında bu sürücü tarafından dikkate alınır? Çağrılar(), tüm çağrılar bittiğinde Düğüm işleminin konsolda sonlandırılmasına asla izin vermez. – DuxPrime

5

Her sorgu için bir bağlantıyı kapatmayın veya kapatmayın. Bağlantıyı bir kez açıp tekrar kullanın.

2

tüm bu yeniden sizin db bağlantısı gibi daha bir şey yapın

User = function(db) { 
    this.db = db; 
} 


User.prototype.populate = function(callback) { 
    var that = this; 
    this.db.collection(dbName).findOne({email : that.email}, function(err, doc){ 
     if(!err && doc) { 
      that.firstName = doc.firstName; 
      that.lastName = doc.lastName; 
      that.password = doc.password; 
     } 

     if (typeof(callback) === "function"){ 
      callback.call(that); 
     } 
    }); 
}; 
0

Ben aslında her istek sonra bağlantıyı kapatır inanıyorum çağırır, ama {auto_reconnect: true} setleri bunun yüzden, mongodb sunucu geneli gerektiğinde yeni bir bağlantıyı yeniden açar.

İlgili konular