2016-08-22 4 views
5

मैं Node.jsMongoDB - खुले और बंद कनेक्शन - अच्छा अभ्यास

मैं आम तौर पर एक कनेक्शन (connect() विधि के माध्यम से) खोलने के लिए किसी भी समय मैं एक ऑपरेशन और करीबी करने की आवश्यकता के लिए अपने ड्राइवर के माध्यम से MongoDB उपयोग कर रहा हूँ के लिए सलाह देने के लिए यह (जैसे ही मैं समाप्त हो चुका हूं) close() विधि के माध्यम से)। मेरे कार्यक्रमों में, प्राकृतिक रूप में, मुझे मोंगोडीबी के खिलाफ कई संचालन करने की ज़रूरत है और इसलिए ऐसा होता है कि मैं कनेक्शन को कई बार खोलता और बंद करता हूं।

मैं कर रहा हूँ सोच यह एक अच्छा अभ्यास है या क्या यह के रूप में पहला ऑपरेशन निष्पादित किया जाता है, कनेक्शन खोलने एक चर में संग्रहीत और जब कार्यक्रम को बंद निम्नलिखित कार्यों के लिए पहले से ही खोला कनेक्शन का उपयोग करने के लिए बेहतर होगा कि क्या समाप्त होता है।

कोई भी सलाह बहुत सराहना की जाती है।

+0

आप किस ढांचे का उपयोग कर रहे हैं (नोड, पायथन, सी #)? – profesor79

+0

मैं node.js. का उपयोग कर रहा हूँ Thx – Picci

+0

मैं node.js का उपयोग कर रहा हूं और मुझे आश्चर्य है कि (और कैसे) कनेक्शन पूलिंग node.js ड्राइवर के साथ काम करेगी। Thx – Picci

उत्तर

6

एक बार कनेक्शन खोलने के लिए सबसे अच्छा अभ्यास है, इसे एक चर में स्टोर करें और अंत में इसे बंद करें। MongoDB स्पष्ट रूप से इसकी सिफारिश करता है। यही कारण है कि कनेक्शन खोलना और बंद करना मोंगोडीबी एपीआई का हिस्सा है, यह प्रत्येक क्वेरी के लिए स्वचालित रूप से होने के बजाय होता है। प्रत्येक क्वेरी के लिए

उद्घाटन और समापन कनेक्शन दोनों प्रदर्शन (सीपीयू + विलंबता), नेटवर्क यातायात, स्मृति प्रबंधन (बनाने और वस्तुओं को हटाने) के मामले में एक महत्वपूर्ण ओवरहेड का परिचय देंगे, न केवल ग्राहक के लिए लेकिन यह भी सर्वर खुद के लिए , जो अन्य ग्राहकों को भी प्रभावित करता है।

कनेक्शन की शब्दावली के बारे में: जावा जैसे कुछ चालकों में, क्या वास्तव में बनाया है और एक चर में संग्रहीत है एक भौतिक कनेक्शन नहीं है, लेकिन एक MongoClient उदाहरण। यह एक सार (एपीआई) परिप्रेक्ष्य से कनेक्शन की तरह दिखता है, लेकिन यह वास्तव में वास्तविक भौतिक कनेक्शन को समाहित करता है और उपयोगकर्ता से जटिलता छुपाता है।

ड्राइवरों है कि इस समर्थन के लिए, केवल एक बार MongoClient उदाहरण बनाना, यह भी आप जहां चालक, आप के लिए समानांतर में सक्रिय सम्बन्ध बनाये रखते हैं ताकि आप भी केवल एक MongoClient बनाने की जरूरत पूलिंग कनेक्शन से लाभ प्राप्त करने की अनुमति देगा उदाहरण कई धागे भर में।

+0

आपके उत्तर के लिए धन्यवाद। अभी भी आखिरी बात मेरे लिए बिल्कुल स्पष्ट नहीं है। मैं node.js ड्राइवर का उपयोग कर रहा हूं जो मुझे लगता है कि कनेक्शन पूलिंग का समर्थन करता है। मेरी समझ यह है कि कनेक्शन पूलिंग प्रोग्राम को किसी भी समय कनेक्शन की मांग करने की अनुमति देता है, जबकि ड्राइवर पूल को बनाए रखने के लिए जिम्मेदार होता है। अगर मुझे अपने कार्यक्रम के भीतर कनेक्शन स्टोर करने की ज़रूरत है तो मुझे लगता है कि मैं कनेक्शन पूलिंग अवधारणा का उपयोग नहीं कर रहा हूं। क्या आप मुझे समझा सकते हैं। अग्रिम धन्यवाद – Picci

+0

मदद करने के लिए खुश! दुर्भाग्य से, मैं node.js से परिचित नहीं हूं, इसके अलावा मैंने सुना है कि यह एकल-थ्रेडेड है। कनेक्शन पूलिंग तब भी हो सकती है जब यह किसी भी तरह से "पाइपलाइन" प्रश्न पूछे। किसी भी मामले में, केवल एक बार कनेक्शन खोलने और बंद करने से आपको एक ही थ्रेड में और यहां तक ​​कि एक कनेक्शन के साथ भी एक महत्वपूर्ण प्रदर्शन सुधार देना चाहिए। अगर एपीआई सही डिजाइन किया गया था, तो इसे बस "बस काम करना चाहिए"। –

+0

हो सकता है कि इससे कुछ भ्रम को दूर करने में मदद मिलनी चाहिए: परिवर्तनीय (कम से कम जावा में) में संग्रहीत क्या है, यह एक कनेक्शन नहीं है, यह 'मोंगो क्लाइंट' ऑब्जेक्ट है जो पूरे कनेक्शन और कनेक्शन पूल मशीनरी को समाहित करता है। –

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