2010-04-26 11 views
5

यह उन लोगों में से एक है "मुझे पता है मुझे यह नहीं करना चाहिए लेकिन यह ओह इतना सुविधाजनक है।" प्रशन। उसके लिए माफ़ करना।क्या यह वास्तव में CouchDB के डिफ़ॉल्ट व्यवहार का उपयोग कर संस्करण दस्तावेज़ों में गलत है?

मैं दस्तावेजों की एक गुच्छा भंडारण और अपनी पूरी संशोधन इतिहास रखने के लिए CouchDB का उपयोग करने की योजना है। CouchDB संस्करण स्वचालित रूप से करता है, लेकिन यह strongly discouraged for programmer's use है: "। आप संगामिति नियंत्रण की तुलना में किसी अन्य उद्देश्य के लिए दस्तावेज़ संशोधन पर भरोसा नहीं कर सकते"

से मैं क्या CouchDB विकि पर मिल गया है, संस्करणों या तो compaction के दौरान या replication दौरान हटा दिया जाता है कर सकते हैं। जहां तक ​​मैं कह सकता हूं, कॉम्पैक्शन हमेशा मैन्युअल रूप से ट्रिगर किया जाना चाहिए और प्रतिकृति तब होती है जब एक से अधिक डेटाबेस सर्वर होते हैं।

सवाल यह है: अगर मैं संघनन नहीं चलेंगे और अपने दस्तावेज़ों के लिए केवल एकल डाटाबेस उदाहरण का उपयोग करेगा, मैं सिर्फ CouchDB के दस्तावेज़ संस्करण का उपयोग करें और यह काम करने की उम्मीद कर सकते हैं?

क्या अन्य समस्याओं मैं में आ सकते हैं? जैसे कॉम्पैक्शन नहीं चल रहा है प्रदर्शन को चोट पहुंचाता है या अधिक डिस्क स्थान का उपभोग करता है (अगर मैंने मैन्युअल रूप से वर्जनिंग को संभाला है)?

उत्तर

8

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

इसलिए मैं इस पर भरोसा नहीं करता क्योंकि हमारे उद्योग में, जैसे सामान आपको 6 महीने में परेशान करेंगे, जब तक आप पूरी तरह से गारंटी नहीं दे सकते कि आपने कभी भी कॉच डीबी अपडेट नहीं किया है।

4

तो यह गलत है, तो मैं नहीं चाहता कि सही होना चाहता हूँ!

असल में, नहीं। यह गलत है। माइकल ने इसे अच्छी तरह समझाया: सबसे अच्छा मामला परिदृश्य यह आपके ऐप को भविष्य के सबूत नहीं बनाता है, और सबसे बुरी स्थिति आपको खराब बग मिलेगी जो आपको असुविधाजनक समय पर फिर से आर्किटेक्ट करने के लिए मजबूर करती हैं।

Google ऐप इंजन पर विचार करें। उनके सुझाए गए लेनदेन पैटर्न क्या है?

  1. लेनदेन
  2. शुरू कुंजी
  3. संशोधित संस्थाओं द्वारा अपने संस्थाओं को लाने और उन्हें
  4. समाप्ति लेनदेन

बचाने ये एक समारोह जो फिर से रन करता है, तो लेन-देन में विफल रहता है के रूप में। क्यूं कर? और बाहरी दायरे में घूमने के बजाय लेनदेन के भीतर क्यों लाया जाना चाहिए?

क्योंकि App इंजन आंतरिक MVCC उपयोग करता है। यदि आपको टक्कर मिलती है (आपका संशोधन गलत है क्योंकि किसी और ने अपडेट किया है), तो वे आपके फ़ंक्शन को फिर से चलाएं। अगला पुनरावृत्ति नए संशोधन को लाएगा, नए डेटा से अपडेट करेगा, और सही संशोधन के साथ फिर से डाला जाएगा। मुद्दा यह है कि, Google उपयोगकर्ताओं को यह खुलासा नहीं करता है क्योंकि यह एप्लिकेशन-स्तरीय संस्करण बनाने के लिए उपयुक्त ढांचा नहीं है।

संबंधित मुद्दे