2012-11-15 10 views
16

सबसे पहले, मैं इस सवाल के बारे में पता:क्या मोंगोडीबी हटाए गए स्थान का पुन: उपयोग करता है?

Auto compact the deleted space in mongodb?

मेरा प्रश्न हालांकि डीबी फ़ाइल आकार सिकुड़ के बारे में नहीं है, लेकिन नष्ट कर दिया अंतरिक्ष के पुन: उपयोग के बारे में अधिक। मान लें कि मेरे पास संग्रह में 100 के दस्तावेज़ हैं, फिर मैं उनमें से 50 के हटा देता हूं। क्या मोंगो अपनी डेटा फाइल के भीतर अंतरिक्ष का पुन: उपयोग करेगा कि हटाए गए दस्तावेज़ों को मुक्त कर दिया गया है? या वे हटाए गए के रूप में बस "चिह्नित" हैं?

मुझे डिस्क पर फ़ाइल के वास्तविक आकार के बारे में बहुत कुछ परवाह नहीं है, इसके बारे में और अधिक "क्या यह बढ़ता है और बढ़ता है"।

उत्तर

20

अपडेट (मार्च 2015): 3.0 रिलीज के अनुसार, मोंगोडीबी में कई storage engines उपलब्ध हैं। यह उत्तर एमएमएपी स्टोरेज इंजन (अभी भी मोंगोडीबी 3.0 में डिफ़ॉल्ट) पर लागू होता है, अन्य इंजनों के लिए उत्तर (उदाहरण के लिए वायर्ड टाइगर) काफी अलग है और यह ट्यून करने योग्य और समायोज्य भी हो सकता है। इसलिए यदि आप किसी अन्य इंजन का उपयोग कर रहे हैं, तो कृपया उस स्पेस इंजन के लिए प्रासंगिक दस्तावेज़ पढ़ें ताकि यह निर्धारित किया जा सके कि आपकी जगह फिर से उपयोग डिफ़ॉल्ट और विकल्प क्या है।

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

यदि आप बाद में repair, या resync a secondary स्क्रैच से करते हैं, तो डेटा फ़ाइलों को फिर से लिखा जाता है और डिस्क पर स्थान पुनः प्राप्त किया जाएगा (दस्तावेज़ों पर किसी भी पैडिंग को भी हटा दिया जाता है)। यह वह जगह है जहां आप डिस्क पर वास्तविक स्थान पुनर्विचार देखेंगे। किसी अन्य क्रिया के लिए (compact शामिल) डिस्क पर उपयोग नहीं बदलेगा और यहां तक ​​कि बढ़ सकता है।

2.2+ के साथ अब आप हटाए गए स्थान का पुन: उपयोग करने के लिए collMod command और usePowersOf2Sizes विकल्प का उपयोग कर सकते हैं (ध्यान दें कि यह default in 2.6 + है)। इसका मतलब है कि दस्तावेज़ के लिए प्रारंभिक स्थान आवंटन थोड़ा कम कुशल है (उदाहरण के लिए 400 बाइट दस्तावेज़ के लिए 512 बाइट्स) लेकिन इसका मतलब है कि जब एक नया दस्तावेज़ डाला जाता है तो यह उस स्थान को फिर से उपयोग करने में सक्षम होने की अधिक संभावना है। यदि आप दस्तावेजों को हटा रहे हैं (या बढ़ रहे हैं और इसलिए आगे बढ़ रहे हैं) तो यह लंबी अवधि में अधिक कुशल होगा।

किसी को भी है कि रुचि रखता है के लिए, लोगों कि भंडारण कोड का एक बहुत (Mathias Stearn) ने लिखा है में से एक भंडारण internals के बारे में बहुत प्रस्तुति है, जो हो सकता है found here

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