MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

कॉच डीबी/काउचबेस/मोंगोडीबी लेनदेन अनुकरण?

Couchdb डिफ़ॉल्ट रूप से लेन-देन करता है। काउचडब के प्रत्येक दस्तावेज़ में एक _rev होता है चाभी। किसी दस्तावेज़ के सभी अपडेट इस _rev . के विरुद्ध किए जाते हैं कुंजी:-

  1. दस्तावेज़ प्राप्त करें।
  2. _rev प्रॉपर्टी का उपयोग करके इसे अपडेट के लिए भेजें।
  3. यदि अपडेट सफल होता है तो आपने दस्तावेज़ के नवीनतम _rev को अपडेट कर दिया है
  4. यदि अद्यतन विफल रहता है तो दस्तावेज़ हाल का नहीं था। चरण 1-3 दोहराएं।

देखें श्री कर्ट का यह जवाब अधिक विस्तृत स्पष्टीकरण के लिए।

couchdb प्राप्तियां एक बैंकिंग उदाहरण है जो दिखाता है कि काउचडब में लेनदेन कैसे किया जाता है।

और यह परमाणु बैंक हस्तांतरण भी है लेख जो काउचडब में लेन-देन का वर्णन करता है।

वैसे भी इन सभी कड़ियों में सामान्य विषय यह है कि यदि आप _rev के विरुद्ध अद्यतन करने के काउचडब पैटर्न का पालन करते हैं आपके डेटाबेस में असंगत स्थिति नहीं हो सकती है।

_id . के बाद से सभी काउचडब दस्तावेज़ अद्वितीय हैं दो दस्तावेज़ों में फ़ील्ड समान नहीं हो सकते। कुकबुक देखें देखें

टिप्पणी के आधार पर संपादित करें

आप इस मामले में अलग दस्तावेजों का उपयोग कर सकते हैं। आप कोई दस्तावेज़ सम्मिलित करें, सफलता प्रतिक्रिया के लिए प्रतीक्षा करें। फिर एक और दस्तावेज़ जोड़ें जैसे

{_id:'some_id','count':1}

इसके साथ आप एक नक्शा कम करें दृश्य सेट कर सकते हैं जो इन दस्तावेजों के परिणामों की गणना करता है और आपके पास एक अद्यतन काउंटर है। आप बस इतना कर रहे हैं कि अपडेट के लिए एक दस्तावेज़ को अपडेट करने के बजाय आप एक सफल इंसर्ट को दर्शाने के लिए एक नया दस्तावेज़ सम्मिलित कर रहे हैं।

ठीक है, इसलिए मैंने पहले ही वर्णन किया है कि आप अलग-अलग दस्तावेज़ों पर अपडेट कैसे कर सकते हैं, लेकिन एक दस्तावेज़ को अपडेट करते समय भी आप असंगतता से बच सकते हैं यदि आप:

  1. नई फ़ाइल डालें
  2. जब काउचडब एक सफल संदेश देता है -> काउंटर को अपडेट करने का प्रयास करें।

यह क्यों काम करता है?

यह काम करता है क्योंकि जब आप update document . को अपडेट करने का प्रयास करते हैं आपको एक _rev की आपूर्ति करनी होगी डोरी। आप _rev के बारे में सोच सकते हैं आपके दस्तावेज़ के लिए एक स्थानीय राज्य के रूप में। इस परिदृश्य पर विचार करें:-

  1. आप उस दस्तावेज़ को पढ़ते हैं जिसे अद्यतन किया जाना है।
  2. आप कुछ फ़ील्ड बदलते हैं।
  3. इस बीच एक अन्य अनुरोध ने मूल दस्तावेज़ को पहले ही बदल दिया है। इसका मतलब है कि दस्तावेज़ में अब एक नया _rev है
  4. लेकिन आप काउचडब से दस्तावेज़ को _rev . के साथ अद्यतन करने का अनुरोध करते हैं वह है stale जिसे आपने चरण #1 में पढ़ा है।
  5. काउचडीबी एक अपवाद उत्पन्न करेगा।
  6. आपने दस्तावेज़ को फिर से पढ़ा नवीनतम _rev . प्राप्त करें और इसे अपडेट करने का प्रयास करें।

इसलिए यदि आप ऐसा करते हैं तो आपको हमेशा दस्तावेज़ के नवीनतम संशोधन के खिलाफ अपडेट करना होगा। मुझे आशा है कि इससे चीजें थोड़ी स्पष्ट हो जाएंगी।

नोट:

जैसा कि डेनियल ने बताया _rev नियम बल्क अपडेट पर लागू नहीं होते हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग डेटा और mongoDB - वंशानुक्रम और @DBRef

  2. नेवला में सरणी के भीतर $push का उपयोग करना

  3. संग्रह से डेटा प्राप्त करें b संग्रह में नहीं एक MongoDB शेल क्वेरी में

  4. सभी उपदस्तावेजों को कैसे क्वेरी करें

  5. MongoDB 3.2 प्रमाणीकरण विफल