2009-08-26 25 views
21

निम्नलिखित ("उदाहरण" का उपयोग कर एक नमूना दस्तावेज़ प्रकार के रूप में) संस्करण को लागू करने के लिए एक व्यवहार्य रणनीति होगा:CouchDB संस्करण रणनीति

जहां प्रकार क्षेत्र example_original नाम पर है एक मूल दस्तावेज है।

दस्तावेज़ में बाद में परिवर्तनों में सभी उदाहरण example_change और example_original दस्तावेज़ की एक कुंजी के रूप में टाइप करें। परिवर्तन में टाइमस्टैम्प भी होगा।

एक दस्तावेज़ को example_current के साथ रखें जो example_original का उदाहरण है उदाहरण के लिए सभी उदाहरण_change "लागू"। इस दस्तावेज़ पर एक नया example_change दस्तावेज़ स्वचालित रूप से लागू किया जाएगा।

एक विशिष्ट संस्करण ढूंढना उदाहरण_ऑर्गिजनल दस्तावेज़ को पुनर्प्राप्त करने और वांछित परिवर्तनों को लागू करने में शामिल होगा (ज्यादातर एक निश्चित टाइमस्टैंप तक, लेकिन यह कई बदलाव भी हो सकता है)।

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

इस दृष्टिकोण में आप क्या पेशेवर और विपक्ष देखते हैं?

+0

क्या आप दस्तावेज़ सामग्री या दस्तावेज़ संरचना का संस्करण बनाने की कोशिश कर रहे हैं? – Dokie

+0

केवल सामग्री। फ़ील्ड्स को कभी भी हटाया नहीं जाएगा। – mac

उत्तर

9

मेरी पहली चिंता यह है कि: जब एक निश्चित संस्करण "प्राप्त" होता है, तो क्या आप डेटाबेस को संशोधित किए बिना मूल में परिवर्तन लागू कर सकते हैं?

क्या आपको कभी भी इतिहास से कुछ हटाना होगा? क्या आपको पक्का विशवास है? वास्तव में, वास्तव में यकीन है? शाखाओं के बारे में कैसे?

सब कुछ, यह एक जटिल रणनीति की तरह दिखता है। ध्यान रखें कि मैंने कॉच डीबी के बारे में सुना है लेकिन इसका कभी भी उपयोग नहीं किया। मैं एक और अधिक सरल दृष्टिकोण के लिए जाना चाहूंगा:

  1. जब आप कोई दस्तावेज़ बनाते हैं, तो आप एक यूयूआईडी असाइन करते हैं। नाम का उपयोग न करें या नाम बदलने के दौरान आप परेशानी में भाग लेंगे। एक संस्करण फ़ील्ड जोड़ें जो "1" पढ़ता है। एक दूसरा दस्तावेज़ बनाएं जिसमें एक ही यूयूआईडी वाले दस्तावेज़ों की एक सूची हो या पहले दस्तावेज़ में "पैरेंट" पॉइंटर जोड़ें।

    प्रति दस्तावेज़ "इतिहास दस्तावेज़" रखने के बाद इतिहास के तेज़ी से नेविगेशन की अनुमति मिलती है लेकिन माता-पिता पॉइंटर्स अधिक "सुरक्षित" होते हैं (क्योंकि आप आसानी से उनके साथ अवैध संरचनाएं नहीं बना सकते हैं)।

  2. जब आप कोई नया संशोधन करते हैं, तो यूयूआईडी का पुन: उपयोग करें और एक नया, अद्वितीय संस्करण असाइन करें। इतिहास दस्तावेज़ या अभिभावक सूचक अद्यतन करें।

यह रणनीति लागू करने के लिए बहुत आसान है और बाद में सभी प्रकार की लचीलापन की अनुमति देती है। आप आसानी से इतिहास के हिस्सों को मिटा सकते हैं, नाम बदलना आसान है, और आप शाखाएं बना सकते हैं।

+0

सुझाव के लिए धन्यवाद, अपना अंक देखें। मुझे इतिहास से कुछ हटाने की आवश्यकता नहीं होगी, लेकिन कुछ बदलावों को "त्रुटि" या इसी तरह के रूप में चिह्नित किया जा सकता है। शाखा बनाने के लिए समर्थन की आवश्यकता नहीं होगी। – mac

1

इन दस्तावेजों की व्यावसायिक स्थिति क्या है, खासकर कानूनी? मैंने परिस्थितियों में काम किया है जहां आपका प्रस्ताव किसी व्यवसाय से निष्पक्ष नहीं होगा, यह साबित करने की आवश्यकता है कि v.3 के रूप में प्रस्तुत दस्तावेज़ वास्तव में दस्तावेज़ का संस्करण 3 है। गतिशील रूप से लागू डेल्टा अनुपालन सरसों में कटौती नहीं करेगा।

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

+0

मुझे नहीं लगता कि यह अनुपालन समस्या का प्रतिनिधित्व करेगा, जब तक कि किसी के पास परिवर्तन दस्तावेज़ों सहित सभी दस्तावेज़ों के लिए ऑडिट लॉग हो। दृष्टिकोण मूल अनुबंध और उसके बाद के संशोधन के समान है। – mac

1

कॉच डीबी के साथ संस्करण के लिए एक रणनीति डेटाबेस को कभी भी कॉम्पैक्ट नहीं करना है जिसमें दस्तावेज़ हैं जिसके लिए आपको पूर्ण इतिहास रखना है। आप अभी भी अन्य डेटाबेस कॉम्पैक्ट कर सकते हैं। यह सरल रणनीति एक संपादन विवाद समाधान रणनीति के साथ बॉक्स के बाहर आज काम करती है।

किसी दस्तावेज़ को हटाने से कोई सामग्री नहीं बल्कि एक हटाए गए संपत्ति सेट के साथ एक नया संस्करण लिखकर किया जा सकता है।

शाखाएं इस तरह से नहीं की जा सकती हैं क्योंकि संस्करण तंत्र संशोधन के एक धागे प्रदान करता है।

अब CouchDB के संभावित भविष्य के लिए:

  • आज प्रत्येक संशोधन दस्तावेज़ की पूरी प्रतिलिपि रखती है, लेकिन एक सोच सकता है कि CouchDB इंजन के अनुकूलन कर सकते थे एक दिन दुकान डेल्टा।
  • यह भी संभव है कि भविष्य में कॉच डीबी कुछ दस्तावेजों के प्रकार की गणना को रोकने के लिए एक एपीआई पेश करेगी। यह सभी दस्तावेजों को एक ही डेटाबेस में रखने की अनुमति देगा। यह कॉच डीबी के लिए एक आसान पैच होगा।
  • यह रणनीति दस्तावेज़ शाखाओं के प्रबंधन को सक्षम करती है लेकिन दस्तावेज़ डेटाबेस के रूप में कॉच डीबी की प्रकृति पर विचार करती है, यह एक उचित, लेकिन दीर्घकालिक, संभावना है।
+0

एक दिलचस्प विचार है, लेकिन अच्छी सलाह नहीं है। जबकि आप कॉम्पैक्शन से बचकर एक बहुत ही सरल संस्करण प्रणाली को कार्यान्वित कर सकते हैं, आप इसके साथ काम करने के बजाय डेटाबेस के खिलाफ काम करेंगे। प्रत्येक संस्करण को स्टोर करने के लिए बेहतर है जिसे आप एक अलग _id के साथ रखना चाहते हैं, ताकि डेटाबेस जानता है कि इसे सहेजा जाना चाहिए। –

+0

@ निकपर्किन्स, मैंने विशेष रूप से "डेटाबेस" कॉम्पैक्ट नहीं करने का उल्लेख किया है .. इसका तात्पर्य है कि आपके पास एक या अधिक अन्य डेटाबेस हो सकते हैं जिन्हें आप अभी भी कॉम्पैक्ट करेंगे। इसलिए यह समाधान डेटाबेस के खिलाफ काम नहीं करता है। –

19

Simple Document Versioning with CouchDB

संस्करण के रूप में संलग्नक इस लेख वर्ज़निंग के लिए ज्यादातर लोगों की आवश्यकताओं के अनुरूप होनी चाहिए में वर्णित दृष्टिकोण।

+2

लिंक अब लाइव नहीं हैं, लेकिन [यह एक] (http://jchris.ic.ht/drl/_design/sofa/_list/post/post-page?startkey=%5B%22Versioning-docs-in-CouchDB % 22% 5 डी) –

+0

वर्णित 4 विधियों का अवलोकन शामिल है मेरा मानना ​​है कि यह एक अद्यतन [लिंक] है (https://blog.couchbase.com/how-implement-document-versioning-couchbase) –

+0

@BrianPutt: आपको लिंक कोचबेस के बारे में बात कर रही है, जो कि कॉच डीबी से अलग है http://www.couchbase.com/couchbase-vs-couchdb –