MongoDB में डेटा संस्करण को लागू करने के तरीके




database-versioning (6)

क्या आप अपने विचार साझा कर सकते हैं कि आप मोंगोडीबी में डेटा वर्जनिंग कैसे कार्यान्वित करेंगे। (मैंने कैसंद्रा के बारे में इसी तरह के सवाल पूछा है। यदि आपके पास कोई विचार है जो डीबी बेहतर है तो कृपया साझा करें)

मान लीजिए कि मुझे एक साधारण पता पुस्तिका में संस्करण रिकॉर्ड की आवश्यकता है। (पता पुस्तिका रिकॉर्ड फ्लैट जेसन ऑब्जेक्ट्स के रूप में संग्रहीत हैं)। मैं उम्मीद करता हूं कि इतिहास:

  • बार-बार इस्तेमाल किया जाएगा
  • एक बार "टाइम मशीन" फैशन में पेश करने के लिए सभी का इस्तेमाल किया जाएगा
  • एक रिकॉर्ड से कुछ सौ से अधिक संस्करण नहीं होंगे। इतिहास समाप्त नहीं होगा।

मैं निम्नलिखित दृष्टिकोणों पर विचार कर रहा हूं:

  • रिकॉर्ड्स के इतिहास या रिकॉर्ड्स में बदलावों को स्टोर करने के लिए एक नया ऑब्जेक्ट संग्रह बनाएं। यह एड्रेस बुक एंट्री के संदर्भ में प्रति संस्करण एक ऑब्जेक्ट स्टोर करेगा। इस तरह के रिकॉर्ड निम्नानुसार दिखेंगे:

    {
     '_id': 'new id',
     'user': user_id,
     'timestamp': timestamp,
     'address_book_id': 'id of the address book record' 
     'old_record': {'first_name': 'Jon', 'last_name':'Doe' ...}
    }
    

    इस दृष्टिकोण को प्रति दस्तावेज़ संस्करणों की एक सरणी स्टोर करने के लिए संशोधित किया जा सकता है। लेकिन यह किसी भी फायदे के बिना धीमी दृष्टिकोण प्रतीत होता है।

  • पता पुस्तिका प्रविष्टियों से जुड़े serialized (JSON) ऑब्जेक्ट के रूप में स्टोर संस्करण। मुझे यकीन नहीं है कि मोंगोडीबी दस्तावेजों को ऐसी वस्तुओं को कैसे संलग्न किया जाए। शायद तारों की एक सरणी के रूप में। ( कॉच डीबी के साथ सरल दस्तावेज़ संस्करण के बाद मॉडलिंग )


"वर्मोंगो" नामक एक संस्करण योजना है जो कुछ पहलुओं को संबोधित करती है जिन्हें अन्य उत्तरों में निपटाया नहीं गया है।

इनमें से एक मुद्दा समवर्ती अद्यतन है, दूसरा दस्तावेज हटा रहा है।

वर्मोंगो एक छाया संग्रह में पूर्ण दस्तावेज़ प्रतियों को स्टोर करता है। कुछ उपयोग मामलों के लिए यह बहुत अधिक उपरि का कारण बन सकता है, लेकिन मुझे लगता है कि यह कई चीजों को भी सरल बनाता है।

https://github.com/thiloplanz/v7files/wiki/Vermongo


Javers का उपयोग करने का प्रयास करें। अच्छी पुस्तकालय


पहला बड़ा सवाल यह है कि इसमें डाइविंग "आप कैसे परिवर्तनों को स्टोर करना चाहते हैं" ?

  1. Diffs?
  2. पूरे रिकॉर्ड प्रतियां?

मेरा व्यक्तिगत दृष्टिकोण diffs स्टोर करना होगा। चूंकि इन diffs का प्रदर्शन वास्तव में एक विशेष कार्रवाई है, मैं diffs को एक अलग "इतिहास" संग्रह में डाल दूंगा।

मैं मेमोरी स्पेस को बचाने के लिए अलग-अलग संग्रह का उपयोग करूंगा। आप आमतौर पर एक साधारण क्वेरी के लिए एक पूर्ण इतिहास नहीं चाहते हैं। तो ऑब्जेक्ट से इतिहास को ध्यान में रखते हुए आप उस डेटा को पूछे जाने पर सामान्य रूप से एक्सेस की गई स्मृति से बाहर रख सकते हैं।

मेरे जीवन को आसान बनाने के लिए, मैं एक इतिहास दस्तावेज़ को समय-मुद्रित diffs का शब्दकोश शामिल कर दूंगा। कुछ इस तरह:

{
    _id : "id of address book record",
    changes : { 
                1234567 : { "city" : "Omaha", "state" : "Nebraska" },
                1234568 : { "city" : "Kansas City", "state" : "Missouri" }
               }
}

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

अद्यतन: 2015-10

ऐसा लगता है कि JSON diffs को संभालने के लिए अब एक कल्पना है । यह diffs / परिवर्तनों को स्टोर करने के लिए एक और अधिक मजबूत तरीका की तरह लगता है।


मैंने इस समाधान के माध्यम से काम किया जो डेटा के प्रकाशित, ड्राफ्ट और ऐतिहासिक संस्करणों को समायोजित करता है:

{
  published: {},
  draft: {},
  history: {
    "1" : {
      metadata: <value>,
      document: {}
    },
    ...
  }
}

मैं यहां मॉडल को समझाता हूं: http://software.danielwatrous.com/representing-revision-data-in-mongodb/

उन लोगों के लिए जो जावा में ऐसा कुछ लागू कर सकते हैं, यहां एक उदाहरण दिया गया है:

http://software.danielwatrous.com/using-java-to-work-with-versioned-data/

यदि आप चाहें तो सभी कोड को शामिल कर सकते हैं

https://github.com/dwatrous/mongodb-revision-objects


यदि आप एक तैयार-टू-रोल समाधान की तलाश में हैं -

Mongoid सरल संस्करण में बनाया गया है

http://mongoid.org/en/mongoid/docs/extras.html#versioning

मोंगोइड-इतिहास एक रूबी प्लगइन है जो ऑडिटिंग, पूर्ववत और फिर से शुरू करने के साथ एक महत्वपूर्ण जटिल समाधान प्रदान करता है

https://github.com/aq1018/mongoid-history


यदि आप मोंगोस का उपयोग कर रहे हैं, तो मुझे निम्नलिखित प्लगइन JSON पैच प्रारूप का उपयोगी कार्यान्वयन मिला है

mongoose-patch-history







database-versioning