यह लेनदेन अलगाव की एक संपत्ति है। इसके बारे में बहुत कुछ लिखा गया है और मैं डिज़ाइनिंग डेटा-इंटेंसिव में सिंहावलोकन की अत्यधिक अनुशंसा करता हूँ अनुप्रयोग . मैंने इसे अपनी व्यक्तिगत समझ को बेहतर बनाने में सबसे उपयोगी विवरण पाया।
डिफ़ॉल्ट पोस्टग्रेज स्तर पढ़ें है जो इन समवर्ती लेनदेन में से प्रत्येक को एक समान (उपलब्ध धन की स्थिति) देखने की अनुमति देता है, भले ही वे आश्रित हों।
इसका समाधान करने का एक तरीका यह होगा कि इनमें से प्रत्येक लेन-देन को "SERIALIZABLE" संगतता के रूप में चिह्नित किया जाए।
यह उपलब्धता की कीमत पर आपके आवेदन की शुद्धता को लागू करना चाहिए, यानी इस मामले में दूसरे लेनदेन को रिकॉर्ड को संशोधित करने की अनुमति नहीं दी जाएगी और इसे अस्वीकार कर दिया जाएगा, जिसके लिए पुन:प्रयास की आवश्यकता होगी। POC या कम ट्रैफ़िक एप्लिकेशन के लिए यह आमतौर पर एक पूरी तरह से स्वीकार्य पहला कदम है क्योंकि आप अभी के लिए शुद्धता सुनिश्चित कर सकते हैं।
इसके अलावा ऊपर संदर्भित पुस्तक में मुझे लगता है कि एटीएम के हैंडल की उपलब्धता का एक उदाहरण था। वे इस दौड़ की स्थिति के लिए अनुमति देते हैं और यदि उपयोगकर्ता केंद्रीकृत बैंक से कनेक्ट करने में असमर्थ हैं, लेकिन विस्फोट त्रिज्या को कम करने के लिए अधिकतम निकासी को बाध्य करते हैं!
इसे संबोधित करने का एक अन्य वास्तुशिल्प तरीका लेन-देन को ऑफ़लाइन लेना और उन्हें अतुल्यकालिक बनाना है, ताकि प्रत्येक उपयोगकर्ता द्वारा आमंत्रित लेनदेन एक कतार में प्रकाशित हो, और फिर कतार का एक उपभोक्ता होने से आप स्वाभाविक रूप से किसी भी दौड़ की स्थिति से बच सकें। यहां ट्रेडऑफ़ समान है, एक एकल कार्यकर्ता से एक निश्चित थ्रूपुट उपलब्ध है, लेकिन यह अभी के लिए शुद्धता के मुद्दे को हल करने में मदद करता है:पी
मशीनों में लॉक करना (जैसे पोस्टग्रेज/जीआरपीसी में रेडिस का उपयोग करना) जिसे डिस्ट्रीब्यूटेड लॉकिंग कहा जाता है और इसके बारे में एक अच्छी राशि लिखी जाती है https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html