7

मुझे पता चला कि मॉडल के लिए आरसीएस डेटा दृढ़ता के संदर्भ में हल करने के लिए एक दिलचस्प समस्या है। वे django-reversion और AuditTrail प्राप्त करने के लिए डीजेंगो ओआरएम का उपयोग करके कई समाधान हैं, जिनमें से प्रत्येक इसे करने का अपना तरीका प्रस्तावित करता है।आप अपने मॉडलों के लिए अपने पसंदीदा डीबी पैराडाइम में एक संशोधन नियंत्रण प्रणाली कैसे कार्यान्वित करेंगे?

यहाँ मॉडल (Django मॉडल की तरह प्रारूप में) जो मैं संशोधन करना चाहते हैं है:

class Page(Model): 

    title = CharField() 
    content = TextField() 
    tags = ManyToMany(Tag) 
    authors = ManyToMany(Author) 
  • प्रत्येक संशोधन एक तारीख साथ एनोटेट किया जाना चाहिए, एक संशोधन संख्या , टिप्पणी और उपयोगकर्ता जो संशोधन किया था।

आप इसे डीबी (मोंगो, नियो 4 जे, कॉच डीबी, जीएई डाटास्टोर) में कैसे करेंगे?

प्रति पोस्ट आरसीएस मॉडल का केवल एक उदाहरण पोस्ट करें।

मैं एक पूर्ण कोड नहीं मांग रहा हूं (शायद एक स्पष्टीकरण पर्याप्त है?) लेकिन यह देखने के लिए पर्याप्त है कि प्रत्येक डीबी प्रकार में इस समस्या को कैसे हल किया जा सकता है।

+0

क्या आप अधिक विशिष्ट हो सकते हैं? –

उत्तर

0

कॉच डीबी में यह अपेक्षाकृत सरल है। डीबी में प्रत्येक आइटम में _id और _rev है। तो आपको एक अलग संशोधन संख्या की आवश्यकता नहीं है। मैं शायद यह तब करूँगा। प्रत्येक आइटम को systemrev संख्या असाइन करें। यह संख्या किसी अन्य डीबी रिकॉर्ड का एक लिंक होगा जिसमें उस संशोधन के लिए दिनांक, टिप्पणी और उपयोगकर्ता शामिल होगा।

उदाहरण:

आइटम नज़र रखी जा रही:

{ 
    _id: "1231223klkj123", 
    _rev: "4-1231223klkj123", 
    systemRev: "192hjk8fhkj123", 
    foo: "bar", 
    fooarray: ["bar1", "bar2", bar3"] 
} 

और फिर एक अलग संशोधन रिकॉर्ड बनाने:

{ 
    _id: "192hjk8fhkj123", 
    _rev: "2-192hjk8fhkj123", 
    user: "John", 
    comment: "What I did yesterday", 
    date: "1/1/2010", 
    tags: ["C# edits", "bug fixes"] 
} 
मेरे लिए

यह बहुत सुंदर लगती है ....

2

सबसे पहले, यदि आप CouchDB का उपयोग कर रहे हैं, तो _rev फ़ील्ड का उपयोग न करें।

क्यों? डेटाबेस को संकलित होने पर पुराने संशोधन खो जाते हैं।

संघनन डेटाबेस फ़ाइल पुनर्लेखन करता है, पुराना दस्तावेज़ संशोधन और नष्ट दस्तावेजों को हटाने।

CouchDB wiki - Compaction page

एक जोड़े संभव समाधान कर रहे हैं:

  1. एक ही डाटाबेस में वर्तमान और पुराने संशोधन रखें। वर्तमान और पुराने संशोधन के बीच अंतर निर्धारित करने के लिए एक अतिरिक्त संशोधन फ़ील्ड जोड़ें।
  2. एक अलग डेटाबेस में पुराने संशोधन स्टोर करें।जब "वर्तमान" डेटाबेस में कोई नया संशोधन जोड़ा जाता है, तो पुराने संशोधन दस्तावेज़ को हटाया जा सकता है और "संशोधन" डेटाबेस में डाला जा सकता है।

कौन सा सबसे अच्छा है? यह इस बात पर निर्भर करता है कि आपके डेटा को कैसे पहुंचाया जा रहा है। यदि आप मौजूदा संशोधन से स्वतंत्र रूप से पुराने संशोधनों से पूछ सकते हैं, तो दस्तावेज़ को 2 अलग-अलग डेटाबेस में संग्रहीत करने से आपको कुछ प्रदर्शन लाभ मिलेंगे।