2012-04-18 19 views
6

मैं नोड में देशी मोंगो ड्राइवर के लिए एक रैपर के रूप में MongoJS का उपयोग करने का प्रयास कर रहा हूं। मैं दस्तावेजों, populate(), save() तरह के तरीकों के साथ जावास्क्रिप्ट वर्गों के रूप में मेरे संग्रह में मॉडलिंग कर रहा हूँ आदिमोंगो के साथ मोंगो के साथ कनेक्शन का प्रबंधन करने का उचित तरीका क्या है?

की तरह सी # और जावा सबसे अधिक भाषाओं में, मैं स्पष्ट रूप से जोड़ने के लिए और फिर प्रत्येक क्वेरी के लिए डिस्कनेक्ट करने के लिए इस्तेमाल किया कर रहा हूँ। अधिकांश उदाहरण केवल कनेक्ट करने का एक उदाहरण देते हैं, लेकिन पूरा होने पर कनेक्शन को कभी बंद नहीं करते हैं। मैं अनिश्चित हूं कि ड्राइवर इसे स्वयं प्रबंधित करने में सक्षम है या अगर मुझे मैन्युअल रूप से ऐसा करने की ज़रूरत है। दस्तावेज़ीकरण दुर्लभ है।

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(); 
    }); 
}; 

मैं खोजने रहा है कि जैसे ही मैं MongoJS वस्तु पर close() विधि कॉल के रूप में, मैं अब आगामी कॉल पर एक नया कनेक्शन खोल सकते हैं:

यहाँ प्रासंगिक कोड है। हालांकि, अगर मैं इस विधि को नहीं बुलाता हूं, तो सभी एसिंक कॉल खत्म होने के बाद नोड प्रक्रिया कभी समाप्त नहीं होती है, जैसे कि यह मोंगो से डिस्कनेक्ट करने का इंतजार कर रहा है।

मोंगो के साथ मोंगो से कनेक्शन प्रबंधित करने का उचित तरीका क्या है?

उत्तर

7

यदि आप डिस्कनेक्ट करने के बजाए कनेक्शन को खोलते हैं तो आपको अपने आवेदन से बेहतर प्रदर्शन मिलेगा। एक टीसीपी कनेक्शन बनाना, और, मोंगो डीबी के मामले में, जहां उचित हो, प्रतिकृति सेट/शेरिंग कॉन्फ़िगरेशन की खोज करना, वास्तव में प्रसंस्करण प्रश्नों और अपडेटों के खर्च की तुलना में अपेक्षाकृत महंगा है। इस बार एक बार "खर्च" करना बेहतर है और इस काम को लगातार करने के बजाय कनेक्शन को खोलना बेहतर है।

+2

समझ में आता है। क्या कनेक्शन को बंद करने के लिए कोई उचित समय है जब मुझे ऑब्जेक्ट की आवश्यकता नहीं है (ला ला किसी प्रकार का विनाशक)? या यह ड्राइवर द्वारा खाते में लिया जाता है जब जावास्क्रिप्ट कचरा MongoJS ऑब्जेक्ट का संदर्भ एकत्र करता है? कॉल नहीं करना बंद करें() सभी कॉल समाप्त होने पर नोड प्रक्रिया को कंसोल में समाप्त करने की अनुमति नहीं देता है। – DuxPrime

5

खुला न करें + प्रत्येक प्रश्न के लिए कनेक्शन बंद करें। एक बार कनेक्शन खोलें, और इसका पुनः प्रयोग करें।

2

अधिक कुछ करो सभी के लिए इस पुन: उपयोग अपने डाटाबेस कनेक्शन की तरह कहता है

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

मेरा मानना ​​है कि यह वास्तव में एक अनुरोध के बाद कनेक्शन बंद कर देता है, लेकिन यह {auto_reconnect: सच} सेट, MongoDB सर्वर config में यह इतना जब भी किसी की आवश्यकता हो तो एक नया कनेक्शन फिर से खोल देगा।

संबंधित मुद्दे