किसी भी स्केलेबल डेटाबेस सिस्टम के लिए डिस्क स्टोरेज एक महत्वपूर्ण संसाधन है। आपके डिस्क-आधारित डेटाबेस का प्रदर्शन इस बात पर निर्भर करेगा कि डिस्क पर डेटा कैसे प्रबंधित किया जाता है। आपका MongoDB सर्वर विभिन्न प्लग करने योग्य भंडारण इंजनों का समर्थन करता है जो भंडारण प्रबंधन को संभालते हैं और शुरू में सभी दस्तावेजों को क्रमिक रूप से संग्रहीत करते हैं। जैसे-जैसे डेटाबेस बढ़ता है और कई लेखन कार्य चलते हैं, यह सन्निहित स्थान छोटे-छोटे ब्लॉकों में विभाजित हो जाता है, जिसके बीच में खाली स्थान होता है। डिस्क का आकार बढ़ाने के लिए विशिष्ट समाधान है, हालांकि, ऐसे विकल्प हैं जो आपके डिस्क आकार को स्केल किए बिना खाली स्थान प्राप्त करने में आपकी सहायता कर सकते हैं। एक महत्वपूर्ण बात जो आपको पता होनी चाहिए वह है MongoDB भंडारण आँकड़े और आप विखंडन को संभालने के लिए डेटाबेस को कैसे कॉम्पैक्ट या मरम्मत कर सकते हैं।
आपका डेटाबेस वास्तव में कितना बड़ा है?
आपको हमेशा अपने उत्पादन सर्वर पर डिस्क स्थान की मात्रा पर नज़र रखनी चाहिए, और जब आप क्लाउड प्लेटफ़ॉर्म पर इसके लिए भुगतान कर रहे हों तो अपने डेटाबेस आकार को जानने के लिए भी विवेकपूर्ण होना चाहिए। MongoDB के पास एक कमांड है db.stats() जो एक MongoDB उदाहरण के संग्रहण आंकड़ों में अंतर्दृष्टि प्रदान कर सकता है।
>db.stats() { "db" : "test", "collections" : 5, "views" : 0, "objects" : 53829, "avgObjSize" : 43.555, "dataSize" : 2344556121, "storageSize" :3124416336, "numExtents" : 0, "indexes" : 7, "indexSize" : 8096876, "ok" : 1 }
dataSize
असंपीड़ित डेटा के बाइट्स में कुल आकार इस डेटाबेस में आयोजित किया गया।
storageSize
डिस्क स्थान की कुल राशि डेटाबेस में सभी संग्रहों को आवंटित।
db.stats() . की प्रतिक्रिया MongoDB इंजन के प्रकार पर निर्भर है। आप उपरोक्त मीट्रिक का अपना संस्करण-निर्भर विवरण MongoDB दस्तावेज़ में देख सकते हैं।
storageSize . के बीच बड़ा अंतर क्यों है और डेटा आकार ? यह पहले बताई गई डेटा फ़ाइलों के विखंडन के कारण है। MongoDB जब भी संभव हो खंडित डेटा के बीच मुक्त स्थान का पुन:उपयोग करने का प्रयास करता है और इसे ऑपरेटिंग सिस्टम पर जारी नहीं करता है। हालांकि, WiredTiger में, यदि संपीड़न सक्षम है, तो संग्रहण आकार डेटा आकार से छोटा हो सकता है।
यदि किसी संग्रह से डेटा का एक बड़ा हिस्सा हटा दिया जाता है और संग्रह कभी भी नए दस्तावेज़ों के लिए हटाए गए स्थान का उपयोग नहीं करता है, तो इस स्थान को ऑपरेटिंग सिस्टम में वापस करने की आवश्यकता होती है ताकि इसका उपयोग आपके अन्य डेटाबेस या संग्रह द्वारा किया जा सके। आपको एक कॉम्पैक्ट . चलाने की आवश्यकता होगी या मरम्मत डिस्क स्थान को डीफ़्रैग्मेन्ट करने और प्रयोग करने योग्य खाली स्थान को पुनः प्राप्त करने के लिए ऑपरेशन।
MongoDB को संकुचित करना
MongoDB कॉम्पैक्ट ऑपरेशन संग्रह में सभी दस्तावेज़ों और अनुक्रमणिका को डिस्क स्थान के सन्निहित ब्लॉक में फिर से लिखता है। हालाँकि, यह ऑपरेशन डेटाबेस पर अन्य सभी ऑपरेशनों को ब्लॉक कर देता है जिससे संग्रह संबंधित है। इसलिए, एक स्टैंडअलोन सर्वर के लिए, इसे रखरखाव विंडो के दौरान चलाने की अनुशंसा की जाती है, और प्रतिकृति सेट के लिए, आपको इसे प्रत्येक शार्ड के लिए रोलिंग फैशन में चलाना चाहिए। इसका मतलब है कि पहले सभी सेकेंडरी को कॉम्पैक्ट करना, और फिर अंत में प्राइमरी को ताकि आपके डेटाबेस की उपलब्धता प्रभावित न हो। कमांड का सिंटैक्स है:
db.runCommand({compact: collection-name })
1. एमएमएपीवी1
- संघनन ऑपरेशन डेटा फ़ाइलों और अनुक्रमणिका को डीफ़्रैग्मेन्ट करता है। हालाँकि, मिंग में रहें कि यह ऑपरेटिंग सिस्टम के लिए स्थान जारी नहीं करता है। ऑपरेशन अभी भी मोंगोडीबी द्वारा पुन:उपयोग के लिए डीफ़्रैग्मेन्ट और अधिक सन्निहित स्थान बनाने के लिए उपयोगी है, लेकिन जब मुक्त डिस्क स्थान बहुत कम हो तो इसका कोई उपयोग नहीं होता है।
- संयोजन ऑपरेशन के दौरान 2GB तक अतिरिक्त डिस्क स्थान की आवश्यकता होती है।
- संघनन ऑपरेशन के दौरान एक डेटाबेस लेवल लॉक होता है।
2. वायर्ड टाइगर
WiredTiger इंजन डिफ़ॉल्ट रूप से संपीड़न प्रदान करता है जो MMAPv1 की तुलना में कम डिस्क स्थान की खपत करता है।
- संक्षिप्त प्रक्रिया ऑपरेटिंग सिस्टम के लिए खाली स्थान जारी करती है।
- कॉम्पैक्ट ऑपरेशन को चलाने के लिए न्यूनतम डिस्क स्थान की आवश्यकता होती है।
- WiredTiger डेटाबेस के सभी कार्यों को भी ब्लॉक कर देता है क्योंकि उसे डेटाबेस लेवल लॉक की आवश्यकता होती है।
यदि आप WiredTiger चला रहे हैं, तो हम अनुशंसा करते हैं कि जब स्टोरेज डिस्क आकार के 80% तक पहुंच जाए तो आप कॉम्पैक्ट ऑपरेशन चलाएं। आप हमारे विवरण पृष्ठ से 'कॉम्पैक्ट' ऑपरेशन को ट्रिगर करके ऐसा कर सकते हैं।
MongoDB की मरम्मत करें
MongoDB मरम्मत ऑपरेशन डेटा संग्रहण में सभी त्रुटियों और विसंगतियों को ठीक करता है, फ़ाइल सिस्टम के लिए fcsk कमांड के समान। यह आदेश अप्रत्याशित शटडाउन या क्रैश के बाद डेटा अखंडता सुनिश्चित करता है। हालाँकि, यदि सर्वर पर जर्नलिंग सक्षम है, तो मरम्मत की कोई आवश्यकता नहीं है क्योंकि सर्वर पुनरारंभ होने के बाद स्वचालित रूप से स्वच्छ स्थिति में आने के लिए जर्नल का उपयोग करता है। यदि आपका डेटाबेस दूषित हो गया है, तो एक मरम्मत डेटाबेस दूषित डेटा को सहेज नहीं पाएगा, इसलिए डेटा पुनर्प्राप्ति . के लिए इस कार्रवाई का उपयोग करने की अनुशंसा नहीं की जाती है जब आपके पास अन्य विकल्प हों।
MMAPv1 के लिए, डेटाबेस की मरम्मत डिस्क स्थान को पुनः प्राप्त करने का एकमात्र तरीका है यदि आपको लगता है कि आपका डेटाबेस दूषित नहीं हुआ है और मरम्मत कार्य के लिए आवश्यक पर्याप्त स्थान है। कमांड का सिंटैक्स है:
db.runCommand({repairDatabase: 1})
- यह आदेश डेटाबेस में सभी संग्रहों को संकुचित करता है और सभी अनुक्रमणिकाओं को फिर से बनाता है।
- कार्य के लिए आपके वर्तमान डेटा सेट प्लस 2 गीगाबाइट के आकार के बराबर खाली डिस्क स्थान की आवश्यकता होती है।
स्केलग्रिड में, हम repairDatabase . का उपयोग करते हैं MMAPv1 . के लिए खाली स्थान को पुनः प्राप्त करने के लिए ऑपरेशन इंजन क्लस्टर।