2010-04-09 11 views
11

द्वि-दिशात्मक प्रतिकृति करते समय कॉच डीबी संघर्ष कैसे करता है?कॉचडब संघर्ष समाधान

उदाहरण के लिए: आइए कहें कि दो पता पुस्तिका डेटाबेस हैं (सर्वर ए और बी में)। जैक के लिए एक दस्तावेज़ है जिसमें जैक के संपर्क विवरण शामिल हैं।

  1. सर्वर ए और बी दोहराए गए हैं और दोनों के पास जैक दस्तावेज़ का एक ही संस्करण है।
  2. सर्वर ए में, जैक का मोबाइल नंबर अपडेट नहीं किया गया है।
  3. सर्वर बी में, जैक का पता अपडेट किया गया है।
  4. अब जब हम द्वि-दिशात्मक प्रतिकृति करते हैं तो एक संघर्ष होता है।

सोफेडबी इसे कैसे संभालता है? यदि हम जावा प्रोग्राम में प्रतिकृति शुरू करते हैं, तो क्या यह जानने का कोई तरीका है कि जावा प्रोग्राम से कोई संघर्ष था या नहीं?

उत्तर

17

CouchDB विकि एक विस्तृत explanantion है: http://wiki.apache.org/couchdb/Replication_and_conflicts

संक्षेप में: CouchDB परस्पर विरोधी संस्करणों विलय करने के लिए कोशिश नहीं करता। दोनों संस्करणों को दोनों प्रतिकृतियों में कॉपी किया जाता है। एक निर्धारिती (लेकिन संभवतः एक अनुप्रयोग-दृष्टिकोण से मनमाने ढंग से) एल्गोरिदम उनमें से एक को "आधिकारिक" संस्करण चुनने का विकल्प चुनता है। यह दोनों प्रतिकृतियों पर एक ही संस्करण का चयन करेगा। केवल यह संस्करण डिफ़ॉल्ट रूप से और विचारों में दिखाई देगा। आपका एप्लिकेशन अन्य संस्करणों के लिए पूछताछ कर सकता है, और उन्हें अपनी आवश्यकताओं के अनुसार विलय कर सकता है (संभवतः उपयोगकर्ता को स्क्रीन पर सभी संस्करण दिखाकर) शामिल कर सकते हैं। यदि आपका आवेदन विवादों की तलाश नहीं करता है, तो दो अपडेटों में से एक प्रभावी ढंग से खो जाएगा।

यदि आप प्रतिकृति या थोक लोडिंग API (लेकिन प्रति-दस्तावेज़ REST API) का उपयोग नहीं कर रहे हैं, तो विवादित अद्यतन इसे डेटाबेस में नहीं लाएगा, लेकिन 40 9 त्रुटि के साथ खारिज कर दिया जाएगा। आपको फिर से अपडेट करने की कोशिश करने से पहले विलय करना होगा (बस सबवर्सन में)।

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