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

उत्पादन उपयोग के लिए MongoDB जावा ड्राइवर MongoOptions को कैसे कॉन्फ़िगर करें?

2.9 में अपडेट किया गया:

  • ऑटो कनेक्ट रीट्री इसका सीधा सा मतलब है कि अप्रत्याशित डिस्कनेक्ट के बाद ड्राइवर स्वचालित रूप से सर्वर से फिर से कनेक्ट करने का प्रयास करेगा। उत्पादन परिवेश में आप आमतौर पर चाहते हैं कि यह सेट सही हो।

  • कनेक्शन प्रति होस्ट भौतिक कनेक्शन की मात्रा एक एकल मोंगो उदाहरण है (यह सिंगलटन है इसलिए आपके पास आमतौर पर प्रति आवेदन एक होता है) एक मोंगोड/मोंगोस प्रक्रिया में स्थापित हो सकता है। लिखने के समय जावा ड्राइवर अंततः कनेक्शन की इस राशि को स्थापित करेगा, भले ही वास्तविक क्वेरी थ्रूपुट कम हो (क्रम शब्दों में आप मोंगोस्टैट वृद्धि में "कॉन" आंकड़े देखेंगे जब तक कि यह प्रति ऐप सर्वर पर इस नंबर को हिट न करे)।

    ज्यादातर मामलों में इसे 100 से अधिक सेट करने की कोई आवश्यकता नहीं है, लेकिन यह सेटिंग उन चीजों में से एक है "इसे जांचें और देखें"। ध्यान दें कि आपको यह सुनिश्चित करना होगा कि आपने इसे काफी कम सेट किया है ताकि आपके सर्वर से कनेक्शन की कुल मात्रा अधिक न हो

    db.serverStatus().connections.available

    उत्पादन में हमारे पास वर्तमान में यह 40 पर है।

  • कनेक्ट टाइमआउट . जैसा कि नाम से पता चलता है कि कनेक्शन के प्रयास के निरस्त होने से पहले ड्राइवर मिलीसेकंड की संख्या का इंतजार करेगा। टाइमआउट को कुछ लंबे (15-30 सेकंड) पर सेट करें जब तक कि कोई यथार्थवादी, अपेक्षित मौका न हो, यह अन्यथा सफल कनेक्शन प्रयासों के रास्ते में होगा। आम तौर पर यदि कनेक्शन के प्रयास में कुछ सेकंड से अधिक समय लगता है तो आपका नेटवर्क इंफ्रास्ट्रक्चर उच्च थ्रूपुट के लिए सक्षम नहीं है।

  • अधिकतम प्रतीक्षा समय . कनेक्शन पूल पर कनेक्शन के उपलब्ध होने के लिए एक थ्रेड एमएस की संख्या की प्रतीक्षा करेगा, और यदि यह समय पर नहीं होता है तो एक अपवाद उठाता है। डिफ़ॉल्ट रखें।

  • सॉकेट टाइमआउट . मानक सॉकेट टाइमआउट मान। 60 सेकंड (60000) पर सेट करें।

  • threadsAllowedToBlockForConnectionMultilier . कनेक्शन के लिए गुणकPerHost जो उन थ्रेड्स की संख्या को दर्शाता है जिन्हें कनेक्शन के उपलब्ध होने की प्रतीक्षा करने की अनुमति है यदि पूल वर्तमान में समाप्त हो गया है। यह वह सेटिंग है जो "com.mongodb.DBPortPool$SemaphoresOut:db कनेक्शन प्राप्त करने के लिए सेमाफोर से बाहर" अपवाद का कारण बनेगी। एक बार जब यह थ्रेड कतार थ्रेडअलाउड टूब्लॉकफॉरकनेक्शन मल्टीप्लायर मान से अधिक हो जाती है तो यह इस अपवाद को फेंक देगा। उदाहरण के लिए, यदि कनेक्शनपेरहोस्ट 10 है और यह मान 5 है तो 50 तक थ्रेड्स उपरोक्त अपवाद को फेंकने से पहले ब्लॉक कर सकते हैं।

    यदि आप थ्रूपुट में बड़ी चोटियों की अपेक्षा करते हैं जिससे बड़ी कतारें अस्थायी रूप से इस मान को बढ़ा सकती हैं। हमारे पास इस समय 1500 पर ठीक इसी कारण से है। यदि आपका क्वेरी लोड लगातार सर्वर से आगे निकल जाता है, तो आपको तदनुसार अपने हार्डवेयर/स्केलिंग स्थिति में सुधार करना चाहिए।

  • पढ़ने की वरीयता . (अद्यतन, 2.8+) डिफ़ॉल्ट पठन वरीयता निर्धारित करने के लिए प्रयुक्त होता है और "slaveOk" को प्रतिस्थापित करता है। क्लास फ़ैक्टरी विधि में से किसी एक के माध्यम से एक ReadPreference सेट करें। सबसे सामान्य सेटिंग्स का पूरा विवरण इस पोस्ट के अंत में पाया जा सकता है

  • w . (अद्यतन, 2.6+) यह मान लेखन की "सुरक्षा" निर्धारित करता है। जब यह मान -1 होता है, तो नेटवर्क या डेटाबेस त्रुटियों की परवाह किए बिना राइट किसी भी त्रुटि की रिपोर्ट नहीं करेगा। WriteConcern.NONE इसके लिए उपयुक्त पूर्वनिर्धारित WriteConcern है। यदि w 0 है तो नेटवर्क त्रुटियाँ लेखन को विफल कर देंगी लेकिन mongo त्रुटियाँ नहीं होंगी। इसे आम तौर पर "फायर एंड फॉरगेट" के रूप में लिखा जाता है और इसका उपयोग तब किया जाना चाहिए जब प्रदर्शन स्थिरता और स्थायित्व से अधिक महत्वपूर्ण हो। इस मोड के लिए WriteConcern.NORMAL का उपयोग करें।

    यदि आप w को 1 या उच्चतर पर सेट करते हैं तो लेखन सुरक्षित माना जाता है। सुरक्षित लेखन लेखन को निष्पादित करता है और यह सुनिश्चित करने के लिए सर्वर से अनुरोध करता है कि लेखन सफल हो गया है या त्रुटि मान पुनर्प्राप्त नहीं हुआ है (दूसरे शब्दों में, यह आपके लिखने के बाद getLastError() कमांड भेजता है)। ध्यान दें कि जब तक यह getLastError() कमांड पूरा नहीं हो जाता है, तब तक कनेक्शन सुरक्षित रहता है। इसके परिणामस्वरूप और अतिरिक्त कमांड के परिणामस्वरूप थ्रूपुट w <=0 के साथ लिखने की तुलना में काफी कम होगा। ठीक 1 के w मान के साथ MongoDB गारंटी देता है कि आपने जिस उदाहरण को लिखा था, उस पर लेखन सफल (या सत्यापित रूप से विफल) हुआ।

    प्रतिकृति सेट के मामले में आप w के लिए उच्च मूल्यों का उपयोग कर सकते हैं, जो MongoDB को लौटने से पहले प्रतिकृति सेट के कम से कम "w" सदस्यों को लिखने के लिए कहें (या अधिक सटीक रूप से, "w" सदस्यों को अपने लेखन की प्रतिकृति की प्रतीक्षा करें। ) आप स्ट्रिंग "बहुमत" पर भी सेट कर सकते हैं जो मोंगोडीबी को प्रतिकृति सेट सदस्यों (WriteConcern.MAJORITY) के बहुमत को लिखने के लिए कहता है। विशिष्ट रूप से आपको इसे 1 पर सेट करना चाहिए जब तक कि आपको कच्चे प्रदर्शन (-1 या 0) की आवश्यकता न हो या दोहराए गए लेखन (> 1) की आवश्यकता न हो। 1 से अधिक के मान राइट थ्रूपुट पर काफी प्रभाव डालते हैं।

  • fsync . स्थायित्व विकल्प जो सक्षम होने पर प्रत्येक लिखने के बाद मोंगो को डिस्क पर फ्लश करने के लिए मजबूर करता है। मेरे पास लेखन बैकलॉग से संबंधित कोई स्थायित्व समस्या नहीं है, इसलिए हमारे पास यह उत्पादन में असत्य (डिफ़ॉल्ट) है।

  • जे *(नया 2.7+) *. बूलियन कि जब सही पर सेट किया जाता है तो MongoDB एक सफल जर्नलिंग समूह की प्रतीक्षा करने के लिए लौटने से पहले प्रतिबद्ध होता है। यदि आपके पास जर्नलिंग सक्षम है तो आप इसे अतिरिक्त स्थायित्व के लिए सक्षम कर सकते हैं। यह देखने के लिए http://www.mongodb.org/display/DOCS/Journaling देखें कि जर्नलिंग से आपको क्या मिलता है (और इस प्रकार आप इस फ़्लैग को सक्षम क्यों करना चाहते हैं)।

पढ़ने की वरीयता यदि आप प्रतिकृति सेट के साथ काम कर रहे हैं तो ReadPreference वर्ग आपको यह कॉन्फ़िगर करने की अनुमति देता है कि कौन से mongod इंस्टेंस क्वेरी रूट किए गए हैं। निम्नलिखित विकल्प उपलब्ध हैं:

  • ReadPreference.primary() :सभी रीड्स केवल रेपसेट प्राइमरी मेंबर के पास जाते हैं। इसका उपयोग करें यदि आपको सभी प्रश्नों को सुसंगत (सबसे हाल ही में लिखा गया) डेटा वापस करने की आवश्यकता है। यह डिफ़ॉल्ट है।

  • ReadPreference.primaryPreferred() :यदि संभव हो तो सभी रीड्स रेपसेट प्राथमिक सदस्य के पास जाते हैं लेकिन प्राथमिक नोड उपलब्ध नहीं होने पर माध्यमिक सदस्यों से पूछताछ कर सकते हैं। जैसे कि यदि प्राथमिक अनुपलब्ध हो जाता है, तो पठन अंततः सुसंगत हो जाता है, लेकिन केवल तभी जब प्राथमिक अनुपलब्ध हो।

  • ReadPreference.secondary() :सभी रीड्स सेकेंडरी रेपसेट मेंबर्स के पास जाते हैं और प्राइमरी मेंबर का इस्तेमाल केवल राइट्स के लिए किया जाता है। इसका उपयोग केवल तभी करें जब आप अंततः लगातार पढ़ने के साथ जी सकें। अतिरिक्त प्रतिनिधि सदस्यों का उपयोग पढ़ने के प्रदर्शन को बढ़ाने के लिए किया जा सकता है, हालांकि एक प्रतिनिधि के पास (मतदान) सदस्यों की संख्या की सीमाएं हो सकती हैं।

  • ReadPreference.secondaryPreferred() :सभी पठन माध्यमिक प्रतिनिधि सदस्यों के पास जाते हैं यदि उनमें से कोई भी उपलब्ध हो। प्राथमिक सदस्य का उपयोग विशेष रूप से लिखने के लिए किया जाता है जब तक कि सभी माध्यमिक सदस्य अनुपलब्ध न हो जाएं। प्राथमिक सदस्य को पढ़ने के लिए फॉलबैक के अलावा यह ReadPreference.secondary() जैसा ही है।

  • ReadPreference.निकटतम () :डेटाबेस क्लाइंट के लिए उपलब्ध निकटतम रेपसेट सदस्य के पास पढ़ता है। केवल तभी उपयोग करें जब अंततः सुसंगत पठन स्वीकार्य हों। निकटतम सदस्य ग्राहक और विभिन्न प्रतिनिधि सदस्यों के बीच सबसे कम विलंबता वाला सदस्य है। चूंकि व्यस्त सदस्यों के पास अंततः उच्चतर विलंबताएं होंगी, इसलिए इसे चाहिए स्वचालित रूप से रीड लोड को भी संतुलित करता है, हालांकि मेरे अनुभव में माध्यमिक (पसंदीदा) ऐसा बेहतर लगता है यदि सदस्य विलंबता अपेक्षाकृत सुसंगत हैं।

नोट:उपरोक्त सभी में एक ही विधि के टैग सक्षम संस्करण हैं जो इसके बजाय TaggableReadPreference उदाहरण लौटाते हैं। प्रतिकृति सेट टैग का पूरा विवरण यहां पाया जा सकता है:प्रतिकृति सेट टैग




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो गैर-अद्वितीय क्षेत्रों पर 'डुप्लिकेट कुंजी त्रुटि' दे रहा है

  2. MongoDB एटलस का अवलोकन:भाग दो

  3. जावा का उपयोग करके मोंगोडीबी में खुले कनेक्शन की संख्या प्राप्त करें

  4. 9 नई MongoDB विशेषताएं - MongoDB में मास्टर करना सीखना चाहिए

  5. अत्यधिक उपलब्ध ओपन सोर्स डेटाबेस वातावरण कैसे डिज़ाइन करें