जैसा कि ब्रब टी कहते हैं, डेटाबेस कार्यान्वयन और उनके द्वारा उपयोग किए जाने वाले एल्गोरिदम पर निर्भर करता है: एमवीसीसी या दो चरण लॉकिंग।
CUBRID (खुला स्रोत RDBMS) इस दो एल्गोरिदम के विचार की व्याख्या करता है:
पहला ऐसा तब है जब T2 लेनदेन A रिकॉर्ड को बदलने का प्रयास करता है, यह जानता है कि T1 लेनदेन ने पहले से ही A रिकॉर्ड बदल दिया है और T1 लेनदेन पूरा होने तक इंतजार करता है क्योंकि T2 लेनदेन यह नहीं जान सकता है कि T1 लेनदेन प्रतिबद्ध है या लुढ़का हुआ है वापस। इस विधि को दो-चरण लॉकिंग (2PL) कहा जाता है।
- बहु-संस्करण संगामिति नियंत्रण (MVCC)
अन्य को उनमें से प्रत्येक, टी 1 और टी 2 लेनदेन की अनुमति है, अपने स्वयं के परिवर्तित संस्करण हैं। यहां तक कि जब T1 लेनदेन ने A रिकॉर्ड को 1 से 2 में बदल दिया है, तब भी T1 लेनदेन मूल मूल्य 1 को छोड़ देता है और लिखता है कि A रिकॉर्ड का T1 लेनदेन संस्करण 2 है। फिर, निम्नलिखित T2 लेनदेन A रिकॉर्ड को बदलता है 1 से 3 तक, 2 से 4 तक नहीं, और लिखते हैं कि A रिकॉर्ड का T2 लेनदेन संस्करण 3 है।
जब T1 लेनदेन वापस ले लिया जाता है, तो इससे कोई फर्क नहीं पड़ता कि 2, T1 लेनदेन संस्करण, A रिकॉर्ड पर लागू नहीं है। उसके बाद, यदि T2 लेनदेन प्रतिबद्ध है, तो 3, T2 लेनदेन संस्करण, A रिकॉर्ड पर लागू किया जाएगा। यदि T1 लेनदेन T2 लेनदेन से पहले किया जाता है, तो A रिकॉर्ड 2 में बदल जाता है, और फिर T2 लेनदेन करने के समय 3 हो जाता है। अंतिम लेनदेन की स्थिति प्रत्येक लेनदेन को स्वतंत्र रूप से निष्पादित करने की स्थिति के समान है, अन्य लेनदेन पर किसी भी प्रभाव के बिना। इसलिए, यह ACID संपत्ति को संतुष्ट करता है। इस विधि को मल्टी-वर्जन कंसीलर कंट्रोल (MVCC) कहा जाता है।
MVCC मेमोरी में बढ़े हुए ओवरहेड की कीमत पर समवर्ती संशोधनों की अनुमति देता है (क्योंकि इसमें एक ही डेटा के विभिन्न संस्करणों को बनाए रखना पड़ता है) और गणना (REPETEABLE_READ स्तर में) आप अपडेट को ढीला नहीं कर सकते हैं, इसलिए इसे हाइबरेट जैसे डेटा के संस्करणों की जांच करनी चाहिए ऑप्टिमिस्टिक लॉकिंग के साथ करता है )।
2PL में लेन-देन अलगाव स्तर निम्न को नियंत्रित करते हैं :
क्या डेटा पढ़े जाने पर ताले लगे होते हैं, और किस प्रकार के ताले का अनुरोध किया जाता है।
पढ़े हुए ताले कितने समय तक लगे रहते हैं।
एक अन्य ऑपरेशन द्वारा संशोधित पंक्तियों को संदर्भित करते हुए रीड ऑपरेशन:
तब तक ब्लॉक करें जब तक कि पंक्ति पर अनन्य लॉक को मुक्त न कर दिया जाए।
कथन या लेन-देन शुरू होने के समय मौजूद पंक्ति के प्रतिबद्ध संस्करण को पुनः प्राप्त करें।
बिना डेटा संशोधन को पढ़ें।
लेन-देन आइसोलेशन स्तर का चयन करने से डेटा संशोधनों की सुरक्षा के लिए प्राप्त ताले प्रभावित नहीं होते हैं। लेन-देन हमेशा किसी भी डेटा पर एक विशिष्ट लॉक प्राप्त करता है जो इसे संशोधित करता है और लेनदेन पूरा होने तक उस लॉक को रखता है, भले ही उस लेनदेन के लिए अलग-अलग स्तर निर्धारित किया गया हो। रीड ऑपरेशंस के लिए, लेनदेन अलगाव स्तर मुख्य रूप से अन्य लेनदेन द्वारा किए गए संशोधनों के प्रभावों से सुरक्षा के स्तर को परिभाषित करता है।
एक कम आइसोलेशन स्तर कई उपयोगकर्ताओं की एक ही समय में डेटा तक पहुंचने की क्षमता को बढ़ाता है, लेकिन समवर्ती प्रभाव की संख्या को बढ़ाता है , जैसे गंदे पढ़े या खोए हुए अपडेट, जिससे उपयोगकर्ता मुठभेड़ कर सकते हैं।
SQL सर्वर में ताले और अलगाव के स्तर के बीच संबंध के ठोस उदाहरण (READ_COMMITTED_SNAPSHOT = ON के साथ READ_COMMITED पर छोड़कर 2PL का उपयोग करें)
READ_UNCOMMITED: वर्तमान लेनदेन द्वारा पढ़े गए डेटा को संशोधित करने से अन्य लेनदेन को रोकने के लिए साझा किए गए ताले जारी न करें। READ UNCOMMITTED लेन-देन भी अनन्य तालों द्वारा अवरुद्ध नहीं किया जाता है जो मौजूदा लेनदेन को उन पंक्तियों को पढ़ने से रोकेंगे जो संशोधित किए गए हैं लेकिन अन्य लेनदेन द्वारा प्रतिबद्ध नहीं हैं। [...]
READ_COMMITED:
- यदि READ_COMMITTED_SNAPSHOT को बंद (डिफ़ॉल्ट) पर सेट किया गया है: साझा लेनदेन को संशोधित करने से अन्य लेन-देन को रोकने के लिए साझा किए गए ताले का उपयोग करता है जबकि वर्तमान लेनदेन एक रीड ऑपरेशन चला रहा है। साझा ताले अन्य लेन-देन द्वारा संशोधित पंक्तियों को पढ़ने से भी रोकते हैं जब तक कि अन्य लेनदेन पूरा न हो जाए। [...] अगली पंक्ति के संसाधित होने से पहले रो लॉक जारी किए जाते हैं। [...]
- यदि READ_COMMITTED_SNAPSHOT चालू है, तो डेटाबेस इंजन पंक्ति विवरण का उपयोग डेटा के एक ट्रांज़ैक्चुअल रूप से सुसंगत स्नैपशॉट के साथ प्रस्तुत करने के लिए करता है क्योंकि यह कथन के प्रारंभ में मौजूद था। अन्य लेनदेन द्वारा डेटा को अपडेट से बचाने के लिए ताले का उपयोग नहीं किया जाता है।
REPETEABLE_READ: लेन-देन में प्रत्येक विवरण द्वारा पढ़े गए सभी डेटा पर साझा ताले लगाए जाते हैं और लेनदेन पूर्ण होने तक आयोजित किए जाते हैं।
अनुक्रमिक: सीमा ताले को मुख्य मूल्यों की श्रेणी में रखा जाता है जो लेनदेन में निष्पादित प्रत्येक विवरण की खोज स्थितियों से मेल खाते हैं। [...] रेंज लॉक तब तक आयोजित किए जाते हैं जब तक कि लेनदेन पूरा नहीं हो जाता।