MongoDB पर एक सामान्य प्रतिक्रिया के रूप में बहु-दस्तावेज़ दो चरणों के रूप में किया जा सकता है, जिन्हें मैनुअल में कुछ हद तक व्यापक रूप से प्रलेखित किया गया है (देखें:http://docs.mongodb.org/manual/tutorial/perform-two-phase- प्रतिबद्ध/)।
मैनुअल द्वारा सुझाया गया पैटर्न संक्षेप में निम्नलिखित है:
- एक अलग
transactions
सेट करें संग्रह, जिसमें लक्षित दस्तावेज़ . शामिल है , स्रोत दस्तावेज़ , मान और राज्य (लेन-देन का) initial
के साथ नया ट्रांजेक्शन ऑब्जेक्ट बनाएंstate
. के रूप में- लेन-देन करना शुरू करें और
state
को अपडेट करें करने के लिएpending
- दोनों दस्तावेज़ों पर लेन-देन लागू करें (लक्ष्य, स्रोत)
- लेन-देन की स्थिति को
committed
में अपडेट करें - यह निर्धारित करने के लिए खोज का उपयोग करें कि क्या दस्तावेज़ लेन-देन की स्थिति को दर्शाते हैं, यदि ठीक है, तो लेन-देन की स्थिति को
done
पर अपडेट करें
इसके अलावा:
- आपको विफलता परिदृश्यों को मैन्युअल रूप से संभालने की आवश्यकता है (जैसा कि नीचे वर्णित है कुछ नहीं हुआ)
- आपको मूल रूप से एक नाम
state
introducing का परिचय देकर रोलबैक को मैन्युअल रूप से कार्यान्वित करने की आवश्यकता है मानcanceling
आपके कार्यान्वयन के लिए कुछ विशिष्ट नोट:
- मैं आपको
lock_status
. जैसे फ़ील्ड जोड़ने से हतोत्साहित करूंगा ,data_old
,data_new
स्रोत/लक्ष्य दस्तावेजों में। ये लेन-देन के गुण होने चाहिए, न कि स्वयं दस्तावेज़। - लक्ष्य/स्रोत दस्तावेज़ों की अवधारणा को सामान्य बनाने के लिए, मुझे लगता है कि आप
DBref
. का उपयोग कर सकते हैं s:http://www.mongodb.org/display/DOCS/Database+References - मुझे लेन-देन के दस्तावेज़ों के पूर्ण होने पर हटाने का विचार पसंद नहीं है। राज्य को
done
पर सेट करना एक बेहतर विचार की तरह लगता है क्योंकि इससे आप बाद में डिबग कर सकते हैं और पता लगा सकते हैं कि किस तरह के लेनदेन किए गए हैं। मुझे पूरा यकीन है कि आपके पास डिस्क स्थान भी समाप्त नहीं होगा (और इसके लिए समाधान भी हैं)। - आपके मॉडल में आप कैसे गारंटी देते हैं कि सब कुछ उम्मीद के मुताबिक बदल दिया गया है? क्या आप किसी तरह परिवर्तनों का निरीक्षण करते हैं?