CouchDB और दस्तावेज़ संस्करण


12

मैं वर्तमान में CouchDB का उपयोग करके विकी-एस्क एप्लिकेशन पर काम कर रहा हूं और एक दस्तावेज़ संस्करण योजना को लागू करने की कोशिश कर रहा हूं। जिस तरह से मैं इसे देखता हूं, ऐसा करने के दो तरीके हैं:

  1. प्रत्येक संस्करण को एक अलग दस्तावेज़ के रूप में संग्रहीत करें
  2. पुराने संस्करणों को एक दस्तावेज़ में संलग्नक के रूप में संग्रहीत करें।

अभी, मुझे # 1 कार्य करने का एक रूप मिला है। जब कोई उपयोगकर्ता किसी दस्तावेज़ को संपादित करता है और उसे सहेजता है, तो बैक-एंड पहले पिछले संशोधन को एक नए दस्तावेज़ में कॉपी करता है और फिर नए संस्करण को बचाता है। प्रत्येक दस्तावेज़ में एक 'इतिहास' सरणी होती है जिसमें प्रत्येक संस्करण पर डेटा होता है (पुराने संस्करण का दस्तावेज़ _id, टाइमस्टैम्प, संपादक, आदि)।

चूंकि यह इतिहास सरणी अक्सर अद्यतन किए गए दस्तावेज़ के लिए बहुत लंबा हो सकता है, मेरे पास एक ऐसा दृश्य है जो एक दस्तावेज़ को सामान्य पढ़ने के दौरान इतिहास (और इतिहास लाने के लिए एक और दृश्य) प्राप्त करता है।

मेरा प्रश्न यह है: मैं अपने वर्तमान दृष्टिकोण के बारे में असहज महसूस करता हूं और 'अटैचमेंट' पद्धति को बदलने के बारे में सोच रहा हूं। लेकिन मुझे यकीन नहीं। मैं किसी ऐसे व्यक्ति से उम्मीद कर रहा हूं जो CouchDB को मुझसे बेहतर जानता है (मैं केवल कुछ हफ्तों के लिए इस पर रहा हूं - और यह CouchDB का उपयोग करने वाला मेरा पहला प्रोजेक्ट है ... और NoSQL) मुझे बता सकता है कि प्रत्येक के पेशेवरों और विपक्ष क्या हैं। दृष्टिकोण। या वहाँ शायद कुछ अन्य संस्करण योजना है कि मैं देख रहा हूँ?


2
जब मैं प्रदर्शन प्रभाव पर बात नहीं कर सकता, तो आप जिस सिस्टम का उपयोग कर रहे हैं वह "आध्यात्मिक" है, जो काउचबीडी के अनुरूप है। प्रतिक्रिया पदानुक्रम के रूप में पिछले संस्करणों को संग्रहीत करना मुहावरेदार है, क्योंकि यह काउचडीबी के "आध्यात्मिक पूर्वज" में है, लोटस नोट्स दस्तावेज़ डेटाबेस (एनएसएफ) (डेमियन काट्ज ने दूसरे को विकसित करने, रखने और सुधारने से पहले एक पर गहराई से काम किया। जबकि cruft और पिछड़े / बगड़े अनुकूलता आवश्यकताओं को उछालने के लिए, और अधिक बुनियादी संरचनात्मक प्रश्नों के कई नोट्स में उत्तर होंगे।)

जवाबों:


2

केवल परिवर्तनों को संग्रहीत करना एक अच्छा विचार होगा, क्योंकि पुराने दस्तावेजों को डेटाबेस के अंतिम संशोधन के लिए अलग-अलग दस्तावेजों या अनुलग्नकों के रूप में संग्रहीत करने से डेटाबेस सर्वर पर एक ओवरहेड बन जाएगा।

जब आप कभी भी अपने दस्तावेज़ में एक महत्वपूर्ण मूल्य बदलते हैं, तो नाम की एक नई कुंजी जोड़ें _h_i_s_<key_name>। नए बनाए गए (या अंतिम अद्यतन के दौरान बनाए गए) में, हर संपादन / अद्यतन के बाद नीचे की तरह वस्तुओं को जोड़ें: -

{
key_name: "Hello",
_h_i_s_key_name:{time_of_update:value_of_key_name_before_update},
....
}

या

    {
    key_name: "Hello",
    _h_i_s_key_name:[{time:time_of_update,value:value_of_key_name_before_update}, {time:time_of_last_update,value:value_of_key_name_before_last_update}],
    ....
    }

यह दृष्टिकोण लंबे समय में बहुत सारे डिस्क स्थान और प्रतिकृति बैंडविड्थ को बचाएगा।


0

CouchDB के किसी भी ज्ञान के बिना। हर संस्करण को संग्रहीत करना हालांकि केवल अपने पूर्ववर्ती से सीमांत को अलग कर सकता है जो भंडारण की बर्बादी है। मैं केवल परिवर्तनों को संग्रहीत करने की सलाह दूंगा।

आप यहां एक नज़र रखना चाहते हैं या डेटा संस्करण के लिए खोज कर सकते हैं।


यह उत्तर यह कहने में विफल रहता है कि विकल्प 1 (अलग दस्तावेज़) या 2 (दस्तावेज़ के हिस्से के रूप में) कौन सा बेहतर है।
बिंकी

0

सालों बाद ;-)

आपको परिवर्तनों को संग्रहीत करने की आवश्यकता नहीं है क्योंकि CouchDB आपके लिए ऐसा करेगा। यदि कोई दस्तावेज़ बदला जाता है, तो एक नया संशोधन बनाया जाएगा। ज्ञात हो कि यह शारीरिक रूप से उसी के साथ एक और दस्तावेज़ है _idलेकिन एक नया _rev(रिविज़न) है और आपकी डिस्क पर जगह का उपभोग करेगा।

यह सुनिश्चित करने के लिए कि आपको सभी संशोधन रखने होंगे कि इसका क्या अर्थ होगा, आपको एक बहुत बड़ी डिस्क की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.