MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या मोंगोडब के साथ django पलायन को अतीत की बात बना देता है?

मुझे लगता है कि यह वास्तव में एक अच्छा प्रश्न है, लेकिन आपके द्वारा उपयोग किए जा रहे कामों और "माइग्रेशन" के लिए आपकी अपेक्षाओं के आधार पर उत्तर थोड़े बिखरे हुए होंगे।

आइए कुछ सामान्य माइग्रेशन कार्रवाइयों पर एक नज़र डालें:

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

कुछ झुर्रियां

हालांकि, एक ActiveRecord ऑब्जेक्ट के साथ फ़ील्ड नाम की अवधारणा बस थोड़ी सी विषम है। एक ActiveRecord ऑब्जेक्ट वास्तविक डेटाबेस फ़ील्ड में ऑब्जेक्ट गुणों की मैपिंग प्रभावी रूप से प्रदान कर रहा है।

एक विशिष्ट RDBMS में फ़ील्ड नाम का "आकार" वास्तव में प्रासंगिक नहीं होता है। हालांकि, मोंगो में, फ़ील्ड नाम वास्तव में डेटा स्थान घेरता है और यह प्रदर्शन के मामले में एक बड़ा अंतर बनाता है।

अब, यदि आप ActiveRecord जैसे "डेटा ऑब्जेक्ट" के किसी रूप का उपयोग कर रहे हैं, तो आप डेटा में पूर्ण फ़ील्ड नामों को संग्रहीत करने का प्रयास क्यों करेंगे? डीबी शायद ऑब्जेक्ट साइड पर मानचित्र के साथ सभी फ़ील्ड को वर्णानुक्रम में संग्रहीत करना चाहिए। तो एक दस्तावेज़ में 8 फ़ील्ड/गुण हो सकते हैं और डीबी नाम "ए", "बी" ... "जे" होंगे, लेकिन ऑब्जेक्ट नाम "नाम", "मूल्य", "मात्रा" जैसे पठनीय सामान होंगे।

मेरे द्वारा इसे सामने लाने का कारण यह है कि यह फ़ील्ड नाम को संशोधित करने . के लिए एक और शिकन जोड़ता है . यदि आप मैपिंग लागू कर रहे हैं तो फ़ील्ड नाम को संशोधित करने से वास्तव में कोई माइग्रेशन नहीं होता है।

कुछ और झुर्रियां

अगर आप करते हैं किसी विलोपन पर माइग्रेशन लागू करना चाहते हैं, तो आपको बाद . ऐसा करना होगा एक तैनाती। आपको यह भी पहचानना होगा कि ऐसा करने पर आप कोई भी मौजूदा डिस्क स्थान नहीं सहेजेंगे।

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

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब पाठ कई क्षेत्रों की खोज करता है

  2. एक लूप में MongoDB में सहेजा जा रहा है

  3. MongoDB छँटाई

  4. MongoDB में दिनांक फ़िल्टर (सप्ताह, माह और कस्टम दिनांक) के आधार पर दस्तावेज़ कैसे प्राप्त करें?

  5. नेवला _id . द्वारा एक एम्बेडेड दस्तावेज़ ढूंढता है