Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> डेटाबेस

MongoDB टिप्स: भाग 1 - उन्नत डेटाबेस प्रबंधन के लिए आवश्यक रणनीतियाँ

मूल रूप से Tricore द्वारा प्रकाशित: 2 अगस्त, 2017

MongoDB के साथ शुरुआत करना आसान है, लेकिन जब आप एप्लिकेशन बना रहे होते हैं तो अधिक जटिल समस्याएं सामने आती हैं। आप खुद से ऐसे सवाल पूछ सकते हैं:

  • रीप्लिका सेट में रीप्लिका सदस्य को कैसे री-सिंक करें?
  • क्रैश के बाद MongoDB को कैसे रिकवर करें?
  • MongoDB के GridFS स्पेसिफिकेशन का उपयोग फाइलों को स्टोर और रिट्रीव करने के लिए कब करना चाहिए?
  • करप्ट डेटा को कैसे ठीक करें?

यह ब्लॉग पोस्ट MongoDB का उपयोग करते समय इन स्थितियों को संभालने के लिए कुछ टिप्स साझा करता है।

टिप 1: अपने डेटा को रिकवर करने के लिए रिपेयर कमांड पर निर्भर न रहें

यदि आपका डेटाबेस क्रैश हो जाता है और आप --journal फ्लैग के साथ नहीं चल रहे हैं, तो उस सर्वर के डेटा का उपयोग न करें।

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

टिप 2: रीप्लिका सेट के एक सदस्य को री-सिंक करें

रीप्लिका सेट के एक सदस्य को री-सिंक करने के लिए, सुनिश्चित करें कि कम से कम एक सेकेंडरी सदस्य और एक प्राइमरी सदस्य चालू हैं। फिर, सुनिश्चित करें कि आप Oracle नाम के उपयोगकर्ता के रूप में लॉग इन हैं और MongoDB सेवा को रोकें।

MongoDB नाम के उपयोगकर्ता के रूप में लॉग इन करें और बैकअप फोल्डर में सभी डेटा फाइलों को मूव करें ताकि समस्या आने पर आप उन्हें रिस्टोर कर सकें। यदि पुरानी फाइलें बैकअप फोल्डर में मौजूद हैं, तो आप उन्हें हटा सकते हैं। यदि आप सुनिश्चित नहीं हैं कि डेटा फाइलें कहां मिलेंगी, तो /etc/mongod.conf में देखें। Oracle नाम के उपयोगकर्ता के रूप में, MongoDB सेवा शुरू करें।

डेटाबेस में लॉग इन करके वैलिडेट करें। जब तक सदस्य रीप्लिका सेट में सिंक नहीं हो जाता, तब तक आपको डेटाबेस तक पहुंचने के लिए ऑथेंटिकेट करने की आवश्यकता नहीं है।

रीप्लिकेशन प्रक्रिया पूरी होने के बाद, स्टेटस STARTUP2 से SECONDARY में बदल जाएगा।

टिप 3: छोटे बाइनरी डेटा के लिए GridFS का उपयोग न करें

MongoDB बड़ी फाइलों को स्टोर और रिट्रीव करने के लिए GridFS स्पेसिफिकेशन का उपयोग करता है। संक्षेप में, GridFS बड़े बाइनरी ऑब्जेक्ट्स को डेटाबेस में स्टोर करने से पहले तोड़ देता है। GridFS को दो क्वेरी की आवश्यकता होती है: एक फाइल के मेटाडेटा को लाने के लिए और दूसरी उसकी सामग्री को लाने के लिए। इसलिए, यदि आप छोटी फाइलों को स्टोर करने के लिए GridFS का उपयोग करते हैं, तो आप अपने एप्लिकेशन को करने वाले क्वेरी की संख्या को दोगुना कर रहे हैं।

MongoDB टिप्स: भाग 1 - उन्नत डेटाबेस प्रबंधन के लिए आवश्यक रणनीतियाँ

स्रोत: https://www.slideshare.net

GridFS बड़े डेटा को स्टोर करने के लिए डिज़ाइन किया गया है, यानी ऐसा डेटा जो एक डॉक्यूमेंट में फिट होने के लिए बहुत बड़ा है। एक नियम के रूप में, जो कुछ भी क्लाइंट में लोड करने के लिए बहुत बड़ा है, वह शायद ऐसा कुछ नहीं है जिसे आप एक बार में सर्वर पर लोड करना चाहते हैं। विकल्प स्ट्रीमिंग है। जिसे आप क्लाइंट को स्ट्रीम करने की योजना बना रहे हैं, वह GridFS के लिए एक अच्छा उम्मीदवार है।

टिप 4: डिस्क एक्सेस को कम से कम करें

डेवलपर्स जानते हैं कि RAM से डेटा एक्सेस करना तेज़ है और डिस्क से डेटा एक्सेस करना धीमा है।

हालांकि आप जानते होंगे कि डिस्क एक्सेस की संख्या को कम करना एक बेहतरीन ऑप्टिमाइज़ेशन तकनीक है, लेकिन आप शायद यह नहीं जानते कि इस कार्य को कैसे पूरा किया जाए।

एक तरीका सॉलिड-स्टेट ड्राइव (SSD) का उपयोग करना है। SSDs पारंपरिक हार्ड डिस्क ड्राइव (HDD) की तुलना में कई कार्यों को बहुत तेज़ी से करते हैं। वे MongoDB के साथ भी बहुत अच्छी तरह से काम करते हैं। दूसरी ओर, वे अक्सर छोटे और अधिक महंगे होते हैं।

निम्नलिखित छवि SSDs और HDDs की तुलना करती है।

MongoDB टिप्स: भाग 1 - उन्नत डेटाबेस प्रबंधन के लिए आवश्यक रणनीतियाँ

स्रोत: https://www.serverintellect.com

डिस्क एक्सेस की संख्या को कम करने का दूसरा तरीका अधिक RAM जोड़ना है। हालांकि, यह दृष्टिकोण केवल आपको एक हद तक ले जाएगा, क्योंकि अंततः आपका RAM आपके डेटा के आकार को समायोजित नहीं कर पाएगा।

सवाल यह है कि हम टेरा बाइट्स या पेटा बाइट्स डेटा को डिस्क पर कैसे स्टोर करें, एक ऐसा एप्लिकेशन प्रोग्राम करें जो ज्यादातर मेमोरी में बार-बार अनुरोध किए गए डेटा को एक्सेस करे, और डिस्क से मेमोरी में डेटा को जितना संभव हो उतना कम बार मूव करे?

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

टिप 5: डेटाबेस क्रैश के बाद MongoDB को सामान्य रूप से स्टार्ट करें

यदि आप जर्नलिंग चलाते हैं और आपका सिस्टम रिकवर करने योग्य तरीके से क्रैश होता है, तो आप डेटाबेस को सामान्य रूप से रीस्टार्ट कर सकते हैं। सुनिश्चित करें कि आप अपने सभी सामान्य विकल्पों का उपयोग कर रहे हैं, विशेष रूप से --dbpath (ताकि यह जर्नल फाइलों को ढूंढ सके) और --journal।

MongoDB कनेक्शन स्वीकार करना शुरू करने से पहले आपके डेटा को स्वचालित रूप से ठीक कर देगा। बड़ी डेटा सेट के लिए इस प्रक्रिया में कुछ मिनट लग सकते हैं, लेकिन आमतौर पर बड़ी डेटा सेट पर रिपेयर चलाने में लगने वाले समय से बहुत कम समय लगता है।

जर्नल फाइलें journal डायरेक्टरी में स्टोर होती हैं। इन फाइलों को न हटाएं।

टिप 6: रिपेयर कमांड का उपयोग करके डेटाबेस को कॉम्पैक्ट करें

रिपेयर कमांड अनिवार्य रूप से एक mongodump और फिर एक mongorestore करता है, जिससे आपके डेटा की एक साफ कॉपी बनती है। इस प्रक्रिया में, यह आपकी डेटा फाइलों में किसी भी खाली "होल" को भी हटा देता है।

रिपेयर कमांड ऑपरेशन को ब्लॉक करता है और आपके डेटाबेस के वर्तमान में चल रहे डिस्क स्पेस से दोगुने की आवश्यकता होती है। हालांकि, यदि आपके पास एक और मशीन है, तो आप mongodump और mongorestore का उपयोग करके मैन्युअल रूप से वही प्रक्रिया कर सकते हैं।

मैन्युअल रूप से प्रक्रिया को पूरा करने के लिए, निम्नलिखित चरणों का उपयोग करें:

  1. Hyd1 मशीन को स्टेप डाउन करें और fsync और lock करें:

    rs.stepDown() db.runCommand({fsync : 1, lock : 1})
  2. फाइल को Hyd2 में डंप करें:

    Hyd2$ mongodump --host Hyd1
  3. Hyd1 में डेटा फाइल की एक कॉपी बनाएं, ताकि आपके पास अभी भी बैकअप के रूप में हो। फिर, मूल डेटा फाइल को हटाएं और Hyd1 को खाली डेटा के साथ रीस्टार्ट करें।

  4. Hyd2 से रिस्टोर करें। डेटा फाइल को रिस्टोर करने के लिए, निम्नलिखित कमांड दर्ज करें:

    Hyd2$ mongorestore --host Hyd1 --port 10000 # पोर्ट निर्दिष्ट करें यदि यह 27017 नहीं है

निष्कर्ष

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

इस दो-भाग श्रृंखला के भाग 2 में, हम कुछ टिप्स साझा करेंगे जो बड़े उद्यमों को MongoDB सुविधाओं को उचित रूप से डिजाइन, ऑप्टिमाइज़ और कार्यान्वित करने में मदद करते हैं।

कोई भी टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें।

  1. बेहतर ग्राहक अनुभव के लिए MongoDB के प्रमुख उपयोग मामले बेहतर ग्राहक अनुभव के लिए MongoDB के प्रमुख उपयोग मामले

    मूल रूप से 13 जून, 2018 को ObjectRocket.com/blog पर प्रकाशित लगातार अच्छे ग्राहक अनुभव बनाना कई संगठनों के लिए एक प्रमुख चुनौती बन गया है। वास्तविकता यह है कि एक अच्छे ग्राहक अनुभव के बारे में हमारी अपेक्षाएं पिछले कुछ वर्षों में नाटकीय रूप से बढ़ी हैं। जो कभी अच्छा और अलग था, अब मानक है। डेटा एकत्र

  1. MongoDB को शार्डिंग के साथ कैसे स्केल करें: एक मजबूत, स्केलेबल आर्किटेक्चर बनाएं MongoDB को शार्डिंग के साथ कैसे स्केल करें: एक मजबूत, स्केलेबल आर्किटेक्चर बनाएं

    हाल के एक ब्लॉग पोस्ट में, मैंने चर्चा की कि आपको MongoDB को कब स्केल करने की आवश्यकता है। इस पोस्ट में, फोकस इस बात पर है कि MongoDB को कैसे स्केल किया जाए। MongoDB वर्जन 3.0 ने WiredTiger को डिफ़ॉल्ट स्टोरेज इंजन के रूप में पेश किया। तब से MongoDB स्केलेबिलिटी के मामले में दो दृष्टिकोण प्रदान करन

  1. MongoDB स्पेस मैनेजमेंट मास्टर करें: आवंटन, डैशबोर्ड और स्केलिंग टिप्स MongoDB स्पेस मैनेजमेंट मास्टर करें: आवंटन, डैशबोर्ड और स्केलिंग टिप्स

    उन लोगों के लिए जो MongoDB का उपयोग करने में नए हैं, MongoDB स्पेस उपयोग काफी भ्रमित करने वाला लग सकता है। इस लेख में, मैं समझाऊंगा कि MongoDB स्पेस कैसे आवंटित करता है और ObjectRocket डैशबोर्ड में स्पेस उपयोग की जानकारी की व्याख्या कैसे करें ताकि यह निर्णय लिया जा सके कि आपको अपने इंस्टेंस को कब कॉ