2012-01-18 13 views
8

में डेटाबेस शुद्ध करने को कैसे संभालें I 30 दिनों के डेटा को संग्रहीत करने के लिए मैंगोडब का उपयोग करता हूं जो मुझे स्ट्रीम के रूप में आता है। मैं एक शुद्ध तंत्र की तलाश में हूं जिसके द्वारा मैं नए डेटा के लिए जगह बनाने के लिए सबसे पुराना डेटा फेंक सकता हूं। मैं mysql का उपयोग करता था जिसमें मैंने विभाजनों का उपयोग करके इस स्थिति को संभाला था। मैंने 30 विभाजन रखे जो दिनांक आधारित हैं। मैं सबसे पुराना दिनांकित विभाजन हटाता हूं और नया डेटा रखने के लिए एक नया विभाजन बनाता हूं।मोंगोड

जब मैं मोंगोडब में एक ही चीज़ को मैप करता हूं, तो मुझे दिनांक आधारित 'shards' का उपयोग करना लगता है। लेकिन समस्या यह है कि यह मेरे डेटा वितरण को खराब बनाता है। यदि सभी नए डेटा एक ही शार्ड में हैं, तो वह शार्ड इतना गर्म होगा क्योंकि बहुत से लोग उन्हें एक्सेस कर रहे हैं और पुराने डेटा वाले शर्ड्स उपयोगकर्ताओं द्वारा कम लोड किए जाएंगे।

मेरे पास संग्रह आधारित शुद्धीकरण हो सकता है। मेरे पास 30 संग्रह हो सकते हैं और मैं नए डेटा को समायोजित करने के लिए सबसे पुराने संग्रह को फेंक सकता हूं। लेकिन कुछ समस्याएं हैं 1) यदि मैं संग्रह को छोटा करता हूं तो मैं संग्रह से ज्यादा लाभ नहीं उठा सकता क्योंकि वे प्रति संग्रह किए जाते हैं। 2) मेरे प्रश्नों को सभी 30 संग्रहों से क्वेरी में बदलना है और एक संघ लेना है।

कृपया मुझे इस स्थिति को संभालने के लिए एक अच्छी शुद्ध प्रणाली (यदि कोई है) का सुझाव दें।

उत्तर

9

मोंगोडीबी में शुद्ध करने के लिए वास्तव में केवल तीन तरीके हैं। ऐसा लगता है कि आप पहले से ही कई व्यापार-बंदों की पहचान कर चुके हैं।

  1. एकल संग्रह, पुरानी प्रविष्टियों को प्रतिदिन
  2. संग्रह हटाते हैं, तो पुराने संग्रह ड्रॉप प्रतिदिन
  3. डाटाबेस, पुराने डेटाबेस

विकल्प # 1 ड्रॉप: एकल संग्रह

पेशेवर

  • लागू करने के लिए आसान
  • आसान मानचित्र/कम कर देता है

विपक्ष

  • हटाता आवेषण के रूप में के रूप में महंगे हैं चलाने के लिए, आईओ के बहुत सारे और करने के लिए "को Defragment" या जरूरत का कारण बनता है डीबी "कॉम्पैक्ट"।
  • किसी बिंदु पर आप "लिखने" को दोगुना कर देते हैं क्योंकि आपके पास एक दिन के मूल्य के डेटा और को दिन के मूल्य के डेटा को हटा दें।

विकल्प # 2: प्रतिदिन संग्रह

पेशेवरों

  • collection.drop() के माध्यम से डेटा को निकालने में बहुत तेजी से होता है।
  • फिर भी मानचित्र/प्रत्येक दिन से आउटपुट के रूप में दोस्ताना कम करें सारांश डेटा के खिलाफ विलय या फिर से घटाया जा सकता है।

विपक्ष

  • तुम अब भी कुछ विखंडन समस्या हो सकती है।
  • आपको प्रश्नों को फिर से लिखना होगा। हालांकि, मेरे अनुभव में यदि आपके पास पर्याप्त डेटा है जिसे आप शुद्ध कर रहे हैं, तो आप शायद ही कभी उस डेटा तक पहुंच सकते हैं। इसके बजाय आप उस डेटा पर मानचित्र/Reduces चलाते हैं। तो यह को कई प्रश्नों में परिवर्तित नहीं कर सकता है।

विकल्प # 3: प्रतिदिन डेटाबेस

पेशेवरों

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

विपक्ष

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

अब एक विकल्प # 4 है, लेकिन यह एक सामान्य समाधान नहीं है। मैं कुछ लोगों के बारे में जानता हूं जिन्होंने Capped Collections का उपयोग करके "शुद्ध" किया था। निश्चित रूप से ऐसे मामले हैं जहां यह काम करता है, लेकिन इसमें गुफाओं का एक गुच्छा है, इसलिए आपको वास्तव में यह जानने की जरूरत है कि आप क्या कर रहे हैं।

5

हम एमओटीओडीबी 2.2 रिलीज या उच्चतर से संग्रह के लिए टीटीएल सेट कर सकते हैं। इससे आपको पुराने डेटा को संग्रह से समाप्त करने में मदद मिलेगी।

इस लिंक का पालन करें: http://docs.mongodb.org/manual/tutorial/expire-data/

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