दिलचस्प पोस्ट
jQuery दिनांक स्वरूपण एंड्रॉइड में क्लिक करने योग्य विगेट्स सी में एक स्ट्रिंग उल्टा जीडीबी के साथ प्रोग्राम के मुख्य डंप फ़ाइल का विश्लेषण कैसे करें? पसंदीदा Django युक्तियाँ और सुविधाएँ? क्या प्रमुख एसक्यूएल डाटाबेस में वापस बनाने के लिए संभव है? सब्लाइम टेक्स्ट 2 में रनिंग कोड (मैक ओएस एक्स) जब एक खोल चर के आसपास कोट लपेटें? जांचें कि क्या मूल्य ArrayList में मौजूद है Jquery – मक्खी पर छुपा फार्म तत्व बनाएँ अप्रभावित टास्क अपेशन फेंक दिया जा रहा है लेकिन यह एक कार्य शेड्यूलर द्वारा नियंत्रित किया जाता है। अपग्रेड टास्क अपवाद हेन्डलर और एक निरंतरता केवल ओन्फॉल्टेड हैंडलर java.lang.LinkageError: javax.servlet.jsp.JspApplicationContext.getExpressionFactory NSPredicate अभिव्यक्ति में SUBQUERY की त्वरित व्याख्या एकल चेतावनी त्रुटि को अक्षम करें PHP और कर्ल के साथ Google में प्रवेश करें, कुकी बंद हो गई?

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

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

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

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

मैं निम्नलिखित तरीकों पर विचार कर रहा हूं:

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

     {
      '_id': 'नया आईडी',
      'उपयोगकर्ता': user_id,
      'टाइमस्टैम्प': टाइमस्टैम्प,
      'address_book_id': 'पता पुस्तिका रिकॉर्ड का आईडी' 
      'old_record': {'first_name': 'जॉन', 'अंतिम_नाम': 'डो' ...}
     }
    

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

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

वेब के समाधान से एकत्रित समाधान "MongoDB में डेटा संस्करण को लागू करने के तरीके"

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

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

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

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

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

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

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

अद्यतनः 2015-10

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

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

इन मुद्दों में से एक समवर्ती अपडेट है, दूसरा दस्तावेज़ हटा रहा है

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

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

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

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

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

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

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

वर्तमान संस्करण और सभी पुराने संस्करणों के लिए एकल दस्तावेज़ का उपयोग करके यहां एक और समाधान है:

 { _id: ObjectId("..."), data: [ { vid: 1, content: "foo" }, { vid: 2, content: "bar" } ] } 

data में सभी संस्करण शामिल हैं data अरै का आदेश दिया जाता है , नए संस्करणों को केवल सरणी के अंत में $push एड मिलेगा। data.vid संस्करण आईडी है, जो एक वृद्धिशील संख्या है।

नवीनतम संस्करण प्राप्त करें:

 find( { "_id":ObjectId("...") }, { "data":{ $slice:-1 } } ) 

vid द्वारा एक विशिष्ट संस्करण प्राप्त करें:

 find( { "_id":ObjectId("...") }, { "data":{ $elemMatch:{ "vid":1 } } } ) 

केवल निर्दिष्ट फ़ील्ड लौटें:

 find( { "_id":ObjectId("...") }, { "data":{ $elemMatch:{ "vid":1 } }, "data.content":1 } ) 

नया संस्करण डालें: (और समवर्ती डालने / अपडेट को रोकने)

 update( { "_id":ObjectId("..."), $and:[ { "data.vid":{ $not:{ $gt:2 } } }, { "data.vid":2 } ] }, { $push:{ "data":{ "vid":3, "content":"baz" } } } ) 

2 मौजूदा सबसे हाल के संस्करण का vid है और 3 नए संस्करण को सम्मिलित किया जा रहा है। क्योंकि आपको नवीनतम संस्करण के vid , अगले संस्करण के vid प्राप्त करना आसान है: nextVID = oldVID + 1

$and स्थिति यह सुनिश्चित करेगी, कि 2 नवीनतम vid

इस तरह एक अनूठी अनुक्रमणिका की कोई आवश्यकता नहीं है, लेकिन आवेदन तर्क को डालने पर vid को बढ़ाने का ध्यान रखना होगा।

एक विशिष्ट संस्करण निकालें:

 update( { "_id":ObjectId("...") }, { $pull:{ "data":{ "vid":2 } } } ) 

बस!

(प्रति दस्तावेज़ सीमा 16MB याद है)

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

 { 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

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

नेवला-पैच-इतिहास

एक और विकल्प का उपयोग मोंगोज़-इतिहास प्लगइन का है।

 let mongoose = require('mongoose'); let mongooseHistory = require('mongoose-history'); let Schema = mongoose.Schema; let MySchema = Post = new Schema({ title: String, status: Boolean }); MySchema.plugin(mongooseHistory); // The plugin will automatically create a new collection with the schema name + "_history". // In this case, collection with name "my_schema_history" will be created.