MongoDB डेटाबेस फ़ाइल आकार को कम करना


165

मुझे एक मोंगोडीबी डेटाबेस मिला है जो कभी बड़ा था (> 3 जीबी)। तब से, दस्तावेज़ों को हटा दिया गया है और मैं डेटाबेस फ़ाइलों के आकार के अनुसार कम होने की उम्मीद कर रहा था।

लेकिन चूंकि MongoDB को आवंटित स्थान रहता है, इसलिए फाइलें अभी भी बड़ी हैं।

मैं यहां और वहां पढ़ता हूं कि mongod --repairअप्रयुक्त स्थान को मुक्त करने के लिए एडमिन कमांड का उपयोग किया जाता है, लेकिन मेरे पास इस कमांड को चलाने के लिए डिस्क पर पर्याप्त स्थान नहीं है।

क्या आप एक तरह से जानते हैं कि मैं अप्रयुक्त स्थान को मुक्त कर सकता हूं?


7
क्या इस सवाल का जवाब माना जाता है? क्या हमें अधिक डेटा की आवश्यकता है?
गेट्स वीपी

2
2.8 संस्करण से शुरू करके, आप अपने डेटा को संपीड़ित कर सकते हैं , जो महत्वपूर्ण मात्रा में स्थान बचाता है।
साल्वाडोर डाली

1
मेरे पास एक ही सटीक चुनौती थी, इसे हल करने का सबसे आसान तरीका यह था कि डेटाबेस की प्रतिलिपि copyDatabase () फ़ंक्शन के साथ बनाई जाए, फिर मूल डेटाबेस db.dropDatabase () और फिर डेटाबेस को वापस कॉपी करने के लिए। मेरा डेटाबेस ज्यादातर खाली था और जब मैं कॉपी करता था, केवल वास्तविक प्रयोग करने योग्य डेटा को कॉपी किया जाता था। मूल डेटाबेस को छोड़ने से बड़ी फ़ाइलों को हटा दिया गया। db.repairDatabase () का उपयोग करना एक विकल्प नहीं था क्योंकि मेरा सर्वर पहले से ही डिस्क स्पेस में कम था और इस ऑपरेशन के लिए बहुत बड़ी मात्रा में मुफ्त स्थान की आवश्यकता होती थी, इस ऑपरेशन के लिए आवश्यक से अधिक।
user3892260

जवाबों:


144

अद्यतन: के साथ compactआदेश और WiredTiger ऐसा लगता है कि अतिरिक्त डिस्क स्थान वास्तव में ओएस के लिए जारी किया जाएगा


अद्यतन: v1.9 + के रूप में एक compactआदेश है।

यह कमांड "इन-लाइन" एक संघनन करेगा। यह अभी भी कुछ अतिरिक्त स्थान की आवश्यकता होगी, लेकिन उतना नहीं।


MongoDB द्वारा फ़ाइलों को संपीड़ित करता है:

  • फ़ाइलों को एक नए स्थान पर कॉपी करना
  • दस्तावेजों के माध्यम से लूपिंग और उन्हें फिर से आदेश देना / पुनः हल करना
  • नई फ़ाइलों के साथ मूल फ़ाइलों को बदलना

आप इस "संपीड़न" को चलाकर mongod --repairया सीधे कनेक्ट करके और चलाकर कर सकते हैं db.repairDatabase()

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

  1. डेटाबेस को किसी अन्य कंप्यूटर में स्थापित मोंगो के साथ निर्यात करें (उपयोग करके mongoexport) और फिर आप उसी डेटाबेस (उपयोग mongoimport) को आयात कर सकते हैं । यह एक नए डेटाबेस में परिणाम देगा जो अधिक संपीड़ित है। अब आप mongodनई डेटाबेस फ़ाइलों के साथ मूल प्रतिस्थापित को रोक सकते हैं और आप जाने के लिए अच्छे हैं।
  2. वर्तमान mongod को रोकें और डेटाबेस फ़ाइलों को एक बड़े कंप्यूटर पर कॉपी करें और उस कंप्यूटर पर मरम्मत चलाएं। फिर आप नए डेटाबेस फ़ाइलों को मूल कंप्यूटर पर वापस ले जा सकते हैं।

वर्तमान में मोंगो का उपयोग करके "कॉम्पैक्ट करने के लिए" एक अच्छा तरीका नहीं है। और मानगो निश्चित रूप से बहुत सारे स्थान को चूस सकता है।

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


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

3
आज के रूप में (2010-11-18) ड्वाइट (वाशिंगटन, डीसी में मोंगोडीसी कार्यक्रम में बोलते हुए) ने अपने डेटाबेस को ऑफ़लाइन लेने के बिना यदि आप कॉम्पैक्ट करना चाहते हैं, तो प्रतिकृति / --repair / स्विच ओवर एप्रोच की सिफारिश की है।
डेविड जे।

10
बस एक सिर ऊपर 'मुझे पसंद नहीं है' और रूट के रूप में चलाएं। db फ़ाइलों को रूट करने के लिए chowns। DOH।
टोटोरो

18
'कॉम्पैक्ट' के लिए प्रलेखन का कहना है: "यह ऑपरेशन फ़ाइल सिस्टम पर उपयोग किए जाने वाले डिस्क स्थान की मात्रा को कम नहीं करेगा।" मुझे समझ में नहीं आता कि यह मूल प्रश्न का हल कैसे है।
एड नॉरिस

यदि आप मूल प्रश्न को देखते हैं, तो समस्या का हिस्सा मरम्मत करने के लिए बहुत अधिक डेटा शामिल है। यदि आपने अपने ड्राइव के 2/3 को एक DB के साथ भरा है, तो आप मरम्मत नहीं कर सकते। नई डीबी पूरी तरह से "कॉपी और मरम्मत" और "स्विच" कभी नहीं होगा इससे पहले कि नई आवंटित फाइलें शेष स्थान को बेकार कर देंगी। इसके साथ compact, वह कम से कम मौजूदा फाइलों को रख सकता है। मैं सहमत हूं, यह पूर्ण समाधान नहीं है, लेकिन यह एक वृद्धिशील सुधार है।
गेट्स

39

मेरे पास एक ही समस्या थी, और कमांड लाइन पर बस इसे हल करके:

mongodump -d databasename
echo 'db.dropDatabase()' | mongo databasename
mongorestore dump/databasename

दावे: 15936 संग्रह db.collection बनाना विफल रहा। त्रुटि: अपवाद: आकार निर्दिष्ट करें: <n> जब छाया सही है
ट्वीक

: एक ubuntu प्रतिगमन की तरह लगता है ... डंप फ़ाइल मेटाडेटा छाया हुआ है: इसमें "अपरिभाषित" ... इन समस्याओं को हटाने से आयात समस्या ठीक हो जाती है।
ट्वीक

2
मेरे डेटाबेस ने लगभग पूरी डिस्क को रन किया है। यह 120 जीबी था (डिस्क 160 जीबी) कॉम्पैक्ट फ़ाइल आकार को कम नहीं करता है और अंतरिक्ष की कमी के कारण मरम्मत डैटबेस संभव नहीं है। Mongodump और dropDatabase & mongorestore of db के बाद मेरा डेटाबेस आकार 40 जीबी है।
इगोर बेनिकोव

पुनर्स्थापना आदेश के लिए छोटा सुधारmongorestore --db databasename dump/databasename
JERRY

34

ऐसा लगता है कि मानगो v1.9 + में कॉम्पैक्ट के लिए समर्थन है!

> db.runCommand( { compact : 'mycollectionname' } )

यहां डॉक्स देखें: http://docs.mongodb.org/manual/reference/command/compact/

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


3
@AnujGupta "रिपेयरडैटबेस कमांड डेटाबेस में सभी कलेक्शंस को कम्पैक्ट करता है। यह प्रत्येक कलेक्शन पर कॉम्पैक्ट कमांड को अलग-अलग चलाने के समान है।" docs.mongodb.org/manual/reference/command/repairDatabase/… । इसलिए यदि repairDatabase कॉम्पैक्ट के रूप में आकार को कम करती है। मैं हर हफ्ते बहुत सारे डिलीट और अपडेट के साथ अपने कलेक्शन को कंपेयर कर रहा हूं। मुझे repariDatabase की तुलना में अधिक कॉम्पैक्ट पसंद है क्योंकि पहले यह उन संग्रहों पर लक्षित है जिन्हें आप संपूर्ण डेटाबेस नहीं चाहते हैं। दूसरा यह सिर्फ अपने db फ़ाइलों के x2 के बजाय (मेरे मामले में 500GB) में 2GB मुक्त स्थान की आवश्यकता है।
माज़ियार

1
Btw इसे देखें: "MongoDB आपके डेटा को कॉम्पैक्ट करने और अनुकूलतम प्रदर्शन को पुनर्स्थापित करने के लिए 2 अलग-अलग तरीके प्रदान करता है: repairDatabase और कॉम्पैक्ट। यदि आपके डेटाबेस अपेक्षाकृत छोटे हैं, तो RepairDatabase उपयुक्त है, या आप काफी लंबे समय तक एक नोड को रोटेशन से बाहर ले जा सकते हैं। हमारे डेटाबेस आकार और क्वेरी कार्यभार के लिए, इसने हमारे सभी संग्रहों पर निरंतर संघनन चलाने के लिए और अधिक समझ बनाई। " blog.parse.com/2013/03/26/always-be-compacting github.com/ParsePlatform/Ops/blob/master/tools/mongo_compact.rb
Maziyar

3
@Maziyar docs.mongodb.org/manual/reference/command/compact/#disk-space - "repairDatabase के विपरीत, कॉम्पैक्ट फ़ाइल सिस्टम पर खाली जगह नहीं देता है"।
अनुज गुप्ता

4
@ माज़ियार ओपी अप्रयुक्त स्थान को मुक्त करना चाहता है , जिसे हासिल किया जाता है repairDatabase, नहीं compactcompactअंतरिक्ष खाली नहीं करता है, यह केवल इस्तेमाल की गई जगह को डीफ्रैग्मेन्ट करता है, जो इसे कम नहीं करता है।
अनुज गुप्ता

5
Mongo 3.0 के रूप में, WiredTiger स्टोरेज इंजन का उपयोग करने पर अंतरिक्ष compact को पुनः प्राप्त करेगा
गैरी

19

वर्तमान डेटाबेस में सभी संग्रहों को संकुचित करें

db.getCollectionNames().forEach(function (collectionName) {
    print('Compacting: ' + collectionName);
    db.runCommand({ compact: collectionName });
});

13

यदि आपको पूर्ण मरम्मत चलाने की आवश्यकता है, तो repairpathविकल्प का उपयोग करें । इसे अधिक उपलब्ध स्थान के साथ डिस्क पर इंगित करें।

उदाहरण के लिए, मेरे मैक पर मैंने उपयोग किया है:

mongod --config /usr/local/etc/mongod.conf --repair --repairpath /Volumes/X/mongo_repair

अपडेट: प्रति MongoDB कोर सर्वर टिकट 4266 , आपको --nojournalएक त्रुटि से बचने के लिए जोड़ना पड़ सकता है :

mongod --config /usr/local/etc/mongod.conf --repair --repairpath /Volumes/X/mongo_repair --nojournal

1
इसने बहुत अच्छा काम किया। मुझे जगह में मरम्मत के लिए आवश्यक 2x स्थान की कमी थी, इसलिए मैंने एक NAS लगाया। केवल मुद्दा, इसे पूरा करने में 18 घंटे का समय लगा, लेकिन इसने काम किया। सुनिश्चित करें कि --जोन्जोरल ध्वज जोड़ें।
ज़ेनोकॉन

11

Mongo के 2.8 संस्करण के साथ , आप संपीड़न का उपयोग कर सकते हैं । आपके पास वायर्डटेगर इंजन के साथ संपीड़न के 3 स्तर होंगे, मिमीप (जो 2.6 में डिफ़ॉल्ट है जो संपीड़न प्रदान नहीं करता है):

यहां एक उदाहरण दिया गया है कि आप 16 जीबी डेटा के लिए कितनी जगह बचा पाएंगे:

यहां छवि विवरण दर्ज करें

डेटा इस लेख से लिया गया है ।


7

हमें StorageEngine के आधार पर 2 तरीकों को हल करने की आवश्यकता है।

1. MMAP () इंजन:

आदेश: db.repairDatabase ()

नोट: repairDatabase को आपके वर्तमान डेटा सेट प्लस 2 गीगाबाइट के आकार के बराबर मुफ्त डिस्क स्थान की आवश्यकता होती है। अगर dbpath को रखने वाली मात्रा में पर्याप्त जगह की कमी है, तो आप एक अलग वॉल्यूम माउंट कर सकते हैं और मरम्मत के लिए उपयोग कर सकते हैं। जब मरम्मत के लिए एक अलग वॉल्यूम बढ़ रहा हो, तो आपको कमांड लाइन से रिपेयरडैटबेस चलाना चाहिए और उस फ़ोल्डर को निर्दिष्ट करने के लिए --repairpath स्विच का उपयोग करें जिसमें अस्थायी मरम्मत फ़ाइलों को स्टोर करना है। उदाहरण: कल्पना करें कि DB का आकार 120 GB है, (120 * 2) +2 = 242 GB हार्ड डिस्क स्थान आवश्यक है।

दूसरे तरीके से आप संग्रह वार करते हैं, कमांड: db.runCommand ({कॉम्पैक्ट: 'collectionName'})

2. वायर्डटाइगर: इसका स्वत: ही समाधान हो गया-स्व।


6

MongoDB में स्पेस रिक्लेमेशन पर कुछ काफी भ्रम की स्थिति रही है, और कुछ अनुशंसित अभ्यास कुछ तैनाती प्रकारों में करने के लिए बिल्कुल खतरनाक हैं। नीचे अधिक जानकारी:

TL, DR repairDatabase एक स्टैंडअलोन MongoDB तैनाती से डेटा को उबारने का प्रयास करता है जो एक डिस्क भ्रष्टाचार से उबरने की कोशिश कर रहा है। यदि यह अंतरिक्ष को पुनः प्राप्त करता है, तो यह विशुद्ध रूप से एक दुष्प्रभाव है । रिकवरिंग स्पेस को चलाने का प्राथमिक विचार कभी नहीं होना चाहिए repairDatabase

एक स्टैंडअलोन नोड में स्थान पुनर्प्राप्त करें

WiredTiger: WiredTiger के साथ एक स्टैंडअलोन नोड के लिए, रनिंग compactओएस को एक कैविएट के साथ अंतरिक्ष जारी करेगा: compactMongoDB 3.0.x पर WiredTiger की कमान इस बग से प्रभावित हुई थी: SERVER-21833 जो MongoDB 3.2.3 में तय की गई थी। इस संस्करण से पहले, compactवायर्डटाइगर पर चुपचाप विफल हो सकता था।

MMAPv1: MMAPv1 के काम करने के तरीके के कारण, MMAPv1 संग्रहण इंजन का उपयोग करके अंतरिक्ष को पुनर्प्राप्त करने के लिए कोई सुरक्षित और समर्थित तरीका नहीं है। compactMMAPv1 में डेटा फ़ाइलों को डीफ़्रैग्मेन्ट करेगा, संभवतः नए दस्तावेज़ों के लिए अधिक स्थान उपलब्ध कराएगा, लेकिन यह ओएस पर वापस अंतरिक्ष को रिलीज़ नहीं करेगा।

आप कर सकते हैं चलाने में सक्षम हो repairDatabase, तो आप पूरी तरह से इस के परिणामों को समझने संभावित खतरनाक , आदेश (देखें नीचे) के बाद से repairDatabaseअनिवार्य रूप से भ्रष्ट दस्तावेजों की निकालने से पूरे डेटाबेस का पुनर्लेखन। साइड इफेक्ट के रूप में, यह इस पर किसी भी विखंडन के बिना नए MMAPv1 डेटा फ़ाइलों को बनाएगा और ओएस पर वापस अंतरिक्ष को रिलीज़ करेगा।

एक कम साहसी विधि के लिए, दौड़ना mongodumpऔर mongorestoreMMAPv1 परिनियोजन में आपकी तैनाती के आकार के अधीन संभव हो सकता है।

एक प्रतिकृति सेट में स्थान पुनर्प्राप्त करें

प्रतिकृति सेट कॉन्फ़िगरेशन के लिए, अंतरिक्ष को पुनर्प्राप्त करने के लिए सबसे अच्छा और सबसे सुरक्षित तरीका है , WiredTiger और MMAPv1 दोनों के लिए एक प्रारंभिक सिंक करना।

यदि आपको सेट में सभी नोड्स से स्थान पुनर्प्राप्त करने की आवश्यकता है, तो आप एक रोलिंग प्रारंभिक सिंक कर सकते हैं। यही है, प्राथमिक से नीचे कदम रखने और उस पर प्रारंभिक सिंक करने से पहले, प्रत्येक सेकंड पर प्रारंभिक सिंक का प्रदर्शन करें। प्रारंभिक सिंक विधि को रोल करना प्रतिकृति सेट रखरखाव करने के लिए सबसे सुरक्षित तरीका है, और इसमें बोनस के रूप में कोई डाउनटाइम भी शामिल नहीं है।

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

के बारे में repairDatabase

कृपया repairDatabaseप्रतिकृति सेट नोड्स पर न चलें । यह बहुत खतरनाक है, जैसा कि मरम्मतडॉटबेस पेज में वर्णित है और नीचे अधिक विवरण में वर्णित है।

नाम repairDatabaseथोड़ा भ्रामक है, क्योंकि कमांड कुछ भी सुधारने का प्रयास नहीं करता है। कमांड का उपयोग तब किया जाता था जब स्टैंडअलोन नोड पर डिस्क भ्रष्टाचार हो, जिससे भ्रष्ट दस्तावेज़ हो सकते हैं।

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

MMAPv1 परिनियोजन में, डेटाबेस फ़ाइलों का यह पुनर्निर्माण साइड इफेक्ट के रूप में ओएस के लिए स्थान जारी करता है । ओएस के लिए अंतरिक्ष को जारी करना कभी उद्देश्य नहीं था।

repairDatabaseएक प्रतिकृति सेट पर परिणाम

प्रतिकृति सेट में, MongoDB समान डेटा समाहित करने के लिए सेट में सभी नोड्स की अपेक्षा करता है। यदि आप repairDatabaseएक प्रतिकृति सेट नोड पर चलते हैं , तो एक मौका है कि नोड में repairDatabaseअवांछित भ्रष्टाचार होता है, और आप के लिए भ्रष्ट दस्तावेजों को सावधानीपूर्वक हटा देगा।

निश्चित रूप से, यह बनाता है कि नोड में सेट के बाकी हिस्सों से एक अलग डेटासेट है। यदि एक अद्यतन उस एकल दस्तावेज़ को हिट करने के लिए होता है, तो पूरा सेट क्रैश हो सकता है।

मामलों को बदतर बनाने के लिए, यह पूरी तरह से संभव है कि यह स्थिति लंबे समय तक निष्क्रिय रह सकती है, केवल बिना किसी स्पष्ट कारण के अचानक हड़ताल करने के लिए।


5

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

संघनन प्रक्रिया का व्यवहार निम्नानुसार MongoDB इंजन पर निर्भर है

db.runCommand({compact: collection-name })

MMAPv1

संघनन ऑपरेशन डेटा फ़ाइलों और अनुक्रमितों को डीफ़्रैग्मेन्ट करता है। हालाँकि, यह ऑपरेटिंग सिस्टम के लिए स्थान नहीं छोड़ता है। मानगोडीबी द्वारा पुन: उपयोग के लिए और अधिक सन्निहित स्थान बनाने के लिए ऑपरेशन अभी भी उपयोगी है। हालाँकि, जब फ्री डिस्क स्थान बहुत कम है, तो इसका कोई फायदा नहीं है।

कंप्रेशन ऑपरेशन के दौरान 2GB तक का अतिरिक्त डिस्क स्थान आवश्यक है।

एक डेटाबेस स्तर का लॉक संघनन ऑपरेशन के दौरान आयोजित किया जाता है।

WiredTiger

WiredTiger इंजन डिफ़ॉल्ट रूप से संपीड़न प्रदान करता है जो MMAPv1 की तुलना में कम डिस्क स्थान की खपत करता है।

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

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

db.runCommand({repairDatabase: 1})

3

मोंगोडब 3.0 और उच्चतर में एक नया भंडारण इंजन है - वायर्डटाइगर। मेरे मामले में स्विचिंग इंजन ने डिस्क का उपयोग 100 Gb से घटाकर 25Gb कर दिया है।


1

डेटाबेस फ़ाइलों को आकार में कम नहीं किया जा सकता है। "मरम्मत" डेटाबेस के दौरान, केवल मूंगो सर्वर के लिए अपनी कुछ फ़ाइलों को हटाना संभव है। यदि बड़ी मात्रा में डेटा हटा दिया गया है, तो mongo सर्वर मरम्मत के दौरान, उसकी कुछ मौजूदा फ़ाइलों को "जारी" (हटाएगा) करेगा।


1

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


1

जब मुझे वही समस्या थी, तो मैंने अपना मोंगो सर्वर बंद कर दिया और इसे फिर से कमांड के साथ शुरू किया

mongod --repair

मरम्मत कार्य चलाने से पहले आपको जांचना चाहिए कि क्या आपके पास अपने एचडीडी पर पर्याप्त खाली जगह है (न्यूनतम - आपके डेटाबेस का आकार है)


1

स्टैंडअलोन मोड के लिए आप कॉम्पैक्ट या मरम्मत का उपयोग कर सकते हैं,

शार्प्ड क्लस्टर या रेप्लिका सेट के लिए, मेरे अनुभव में, प्राथमिक पर कॉम्पैक्ट चलाने के बाद, कॉम्पैक्ट के बाद, प्राथमिक डेटाबेस का आकार कम हो जाता है, लेकिन माध्यमिक नहीं। आप द्वितीयक डेटाबेस के आकार को कम करने के लिए resync सदस्य करना चाह सकते हैं । और ऐसा करने से आपको लग सकता है कि माध्यमिक डेटाबेस का आकार प्राथमिक से बहुत कम है, मुझे लगता है कि कॉम्पैक्ट कमांड वास्तव में संग्रह को कॉम्पैक्ट नहीं कर रहा है। तो, मैं समाप्त हो गया प्राथमिक और प्रतिकृति सेट के माध्यमिक स्विचिंग और कर पुनः समन्वयन सदस्य फिर से।

मेरा निष्कर्ष यह है कि, शार्कड / रेप्लिका सेट के आकार को कम करने का सबसे अच्छा तरीका है, रेसिंक सदस्य, प्राथमिक माध्यमिक स्विच करना, और फिर से सिंक करना।


0

शार्प क्लस्टर के मामले में mongoDB -repair अनुशंसित नहीं है।

यदि प्रतिकृति सेट किए गए क्लस्टर का उपयोग करते हैं, तो कॉम्पैक्ट कमांड का उपयोग करें, यह सभी संग्रह के सभी डेटा और इंडेक्स फ़ाइलों को फिर से लिखेगा और डीफ़्रैग्मेन्ट करेगा। वाक्य - विन्यास:

db.runCommand( { compact : "collection_name" } )

जब बल के साथ प्रयोग किया जाता है: प्रतिकृति सेट के प्राथमिक पर सही, कॉम्पैक्ट चलता है। जैसे db.runCommand ( { command : "collection_name", force : true } )

अन्य बिंदुओं पर विचार करने के लिए: -यह संचालन को अवरुद्ध करता है। इसलिए रखरखाव विंडो में निष्पादित करने की सिफारिश की गई है। -अगर प्रतिकृति विभिन्न सर्वरों पर चल रही है, तो प्रत्येक सदस्य पर अलग-अलग निष्पादित करने की आवश्यकता है - शार्प्ड क्लस्टर के मामले में, कॉम्पैक्ट को प्रत्येक शार्क सदस्य पर अलग से निष्पादित करने की आवश्यकता होती है। मोंगोस उदाहरण के खिलाफ निष्पादित नहीं कर सकते।


-5

बस एक तरीका है कि मैं यह करने में सक्षम था। आपके मौजूदा डेटा की सुरक्षा पर कोई गारंटी नहीं। अपने जोखिम के साथ प्रयास करें।

डेटा फ़ाइलों को सीधे हटाएं और मोंगॉड को पुनरारंभ करें।

उदाहरण के लिए, ubuntu (डेटा के लिए डिफ़ॉल्ट पथ: / var / lib / mongodb) के साथ, मेरे पास कुछ फ़ाइलें थीं जैसे नाम: संग्रह। #। मैं संग्रह .0 रखता हूं और अन्य सभी को हटा देता हूं।

यदि आपके पास डेटाबेस में गंभीर डेटा नहीं है, तो एक आसान तरीका लगता है।


फ़ाइलों को <database_name> के रूप में संग्रहीत किया जाता है। <नंबर> जैसे mydb.3 - आप संग्रह को नहीं बता सकते।
बॉबसोफी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.