दिलचस्प पोस्ट
कुंजी द्वारा पंडस समूह द्वारा डेटाफ्रेम तक कैसे पहुंचे एक नोडजेएस http.get प्रतिक्रिया में शरीर कहां है? बैश स्क्रिप्ट से ओएस खोजें विम में एक कमांड को अलग करना MySQL PHP – SELECT WHERE id = array ()? टुकड़ा आंतरिक वर्ग स्थिर होना चाहिए Linux में एक स्थिर लाइब्रेरी कैसे संकलित करें? एक स्ट्रिंग के रूप में, अभिव्यक्ति <Func <TModel, TProperty >> से संपत्ति प्राप्त करें एचडीएफएस के बजाय स्थानीय फाइल को कैसे लोड करें जेईई 7: क्या ईजेबी और सीडीआई बीन्स कंटेनर-प्रबंधित लेनदेन का समर्थन करते हैं? लिंक पर ब्राउज़र टूलटिप्स अक्षम करना और <abbr> s जेडीबीसी एमएसएसक्यूएल से रिटर्न वैल्यू प्राप्त करना अगर फ़ाइल पहले से ही विंडोज़ तरीके से मौजूद है तो स्वचालित रूप से फ़ाइल का नाम बदल दें एनएटी आउट ऑफ़ मेमोरी अपवाद – 1.3 जीपी इस्तेमाल किया गया है लेकिन इसमें 16 जीबी इंस्टॉल किया गया है जावा एफएक्स: प्रारंभिक समय के दौरान नियंत्रक से चरण कैसे प्राप्त करें?

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

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

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

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

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

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

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

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

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

Solutions Collecting From Web of "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.