MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या mongoDB ने मुद्दों को फिर से जोड़ा है या क्या मैं इसे गलत कर रहा हूं?

अपडेट करें :इस विषय के लिए हमारा समर्थन लेख (अनिवार्य रूप से इस पोस्ट की एक प्रति) हमारे कनेक्शन समस्या निवारण दस्तावेज़ में स्थानांतरित कर दिया गया है।

एक ज्ञात समस्या है कि Azure IaaS नेटवर्क लगभग तेरह मिनट (अनुभवजन्य रूप से आ गया) के निष्क्रिय समयबाह्य को लागू करता है। हम यह देखने के लिए Azure के साथ काम कर रहे हैं कि क्या हम चीजों को अधिक उपयोगकर्ता के अनुकूल नहीं बना सकते हैं, लेकिन इस बीच अन्य लोगों ने इस समस्या को हल करने के लिए अपने ड्राइवर विकल्पों को कॉन्फ़िगर करके सफलता प्राप्त की है।

अधिकतम कनेक्शन निष्क्रिय समय

Azure और हमारे ग्राहकों के साथ काम करने में हमने जो सबसे प्रभावी समाधान पाया है, वह है अधिकतम कनेक्शन निष्क्रिय समय को चार मिनट से कम पर सेट करना। विचार यह है कि फ़ायरवॉल द्वारा समस्या को बल देने से पहले ड्राइवर को निष्क्रिय कनेक्शनों को रीसायकल करना है। उदाहरण के लिए, एक ग्राहक, जो C# ड्राइवर का उपयोग कर रहा है, MongoDefaults.MaxConnectionIdleTime सेट करता है। एक मिनट के लिए और इसने उनके मुद्दों को दूर कर दिया।

MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);

एप्लिकेशन कोड स्वयं नहीं बदला, लेकिन अब पर्दे के पीछे चालक आक्रामक रूप से निष्क्रिय कनेक्शनों को पुन:चक्रित करता है। परिणाम सर्वर लॉग में भी देखा जा सकता है:ऐप में निष्क्रिय अवधि के दौरान बहुत सारे कनेक्शन मंथन।

संबंधित मोंगो-उपयोगकर्ता थ्रेड में इस दृष्टिकोण के बारे में अधिक विवरण हैं, सॉकेटएक्सप्शन सी # ड्राइवर का उपयोग नीला पर।

रखें

आप किसी प्रकार के रख-रखाव के साथ अपने कनेक्शनों को कम निष्क्रिय बनाकर भी समस्या का समाधान कर सकते हैं। इसे लागू करना थोड़ा मुश्किल है जब तक कि आपका ड्राइवर इसे बॉक्स से बाहर का समर्थन नहीं करता है, आमतौर पर TCP Keepalive का लाभ उठाकर। यदि आपको अपना खुद का रोल करने की आवश्यकता है, तो सुनिश्चित करें कि हर दो मिनट में पूल से प्रत्येक निष्क्रिय कनेक्शन को पकड़ें और कुछ सरल और सस्ता आदेश जारी करें, शायद एक पिंग।

डिस्कनेक्ट को संभालना

एक आक्रामक फ़ायरवॉल सेटअप के बिना भी समय-समय पर डिस्कनेक्ट हो सकते हैं। उत्पादन में आने से पहले आप यह सुनिश्चित करना चाहते हैं कि आप उन्हें सही तरीके से संभाल लें।

सबसे पहले, ऑटो रीकनेक्ट को सक्षम करना सुनिश्चित करें। ऐसा करने का तरीका ड्राइवर से ड्राइवर में भिन्न होता है, लेकिन जब ड्राइवर को पता चलता है कि एक ऑपरेशन विफल हो गया क्योंकि कनेक्शन खराब था तो ऑटो रीकनेक्ट चालू करना ड्राइवर को फिर से कनेक्ट करने का प्रयास करने के लिए कहता है।

लेकिन यह पूरी तरह से समस्या का समाधान नहीं है। आपके पास अभी भी इस बात का मुद्दा है कि फिर से कनेक्ट होने वाले विफल ऑपरेशन के साथ क्या करना है। स्वत:पुन:कनेक्ट विफल संचालन स्वचालित रूप से पुन:प्रयास नहीं करता है। यह खतरनाक होगा, खासकर लिखने के लिए। तो आमतौर पर एक अपवाद फेंक दिया जाता है और ऐप को इसे संभालने के लिए कहा जाता है। अक्सर पढ़ने का पुन:प्रयास करना कोई ब्रेनर नहीं है। लेकिन लिखने का पुन:प्रयास करने पर सावधानी से विचार किया जाना चाहिए।

नीचे दिया गया मोंगो शेल सत्र इस मुद्दे को प्रदर्शित करता है। डिफ़ॉल्ट रूप से मोंगो शेल में ऑटो रीकनेक्ट सक्षम है। मैं stuff . नामक संग्रह में एक दस्तावेज़ सम्मिलित करता हूं फिर उस संग्रह में सभी दस्तावेज़ खोजें। मैंने फिर तीस मिनट के लिए टाइमर सेट किया और फिर से वही खोज करने की कोशिश की। यह विफल रहा, लेकिन शेल स्वचालित रूप से फिर से जुड़ गया और जब मैंने तुरंत अपने खोज को पुनः प्रयास किया तो यह उम्मीद के मुताबिक काम कर रहा था।

% mongo ds012345.mongolab.com:12345/mydatabase -u *** -p *** 
MongoDB shell version: 2.2.2 
connecting to: ds012345.mongolab.com:12345/mydatabase 
> db.stuff.insert({}) 
> db.stuff.find() 
{ "_id" : ObjectId("50f9b77c27b2e67041fd2245") } 
> db.stuff.find() 
Fri Jan 18 13:29:28 Socket recv() errno:60 Operation timed out 192.168.1.111:12345 
Fri Jan 18 13:29:28 SocketException: remote: 192.168.1.111:12345 error: 9001 socket exception [1] server [192.168.1.111:12345] 
Fri Jan 18 13:29:28 DBClientCursor::init call() failed 
Fri Jan 18 13:29:28 query failed : mydatabase.stuff {} to: ds012345.mongolab.com:12345 
Error: error doing query: failed 
Fri Jan 18 13:29:28 trying reconnect to ds012345.mongolab.com:12345 
Fri Jan 18 13:29:28 reconnect ds012345.mongolab.com:12345 ok 
> db.stuff.find() 
{ "_id" : ObjectId("50f9b77c27b2e67041fd2245") }

हम यहां सहायता के लिए हैं

बेशक, यदि आपके कोई प्रश्न हैं, तो कृपया बेझिझक हमसे [email protected] पर संपर्क करें। हम यहां सहायता के लिए हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला का उपयोग करके अनुक्रमणिका छोड़ने का अनुशंसित तरीका क्या है?

  2. MongoDB में पूर्ण-पाठ खोज कैसे करें

  3. MongoDB में एक तिथि से सेकंड प्राप्त करने के 5 तरीके

  4. दस्तावेज़ डेटाबेस:अनावश्यक डेटा, संदर्भ, आदि (विशेष रूप से MongoDB)

  5. Node.js - नेवला - जाँच करें कि क्या कोई संग्रह मौजूद है