लॉक्स DBMS में कॉन्करेंसी कंट्रोल बनाए रखने का एक अभिन्न अंग हैं। लॉक-आधारित कॉन्करेंसी कंट्रोल लागू करने वाले किसी भी सिस्टम में एक ट्रांजैक्शन तब तक स्टेटमेंट को पढ़ या लिख नहीं सकता जब तक कि उसे आवश्यक लॉक्स प्राप्त न हो जाएं।
लॉक-आधारित प्रोटोकॉल में दो प्रकार के लॉक्स होते हैं:
- बाइनरी लॉक्स (Binary Locks) - ये केवल दो अवस्थाओं में हो सकते हैं: लॉक्ड या अनलॉक्ड।
- शेयर्ड/एक्सक्लूसिव लॉक्स (Shared/Exclusive Locks) - शेयर्ड लॉक्स केवल रीड ऑपरेशन के लिए प्राप्त किए जाते हैं। शेयर्ड लॉक्स कई ट्रांजैक्शन के बीच साझा किए जा सकते हैं क्योंकि कोई डेटा बदला नहीं जा रहा। एक्सक्लूसिव लॉक्स राइट ऑपरेशन के लिए उपयोग किए जाते हैं। केवल एक्सक्लूसिव लॉक रखने वाला ट्रांजैक्शन डेटा मान में परिवर्तन करने की अनुमति देता है।
विभिन्न लॉकिंग प्रोटोकॉल हैं:
सिम्पलिस्टिक लॉक प्रोटोकॉल (Simplistic Lock Protocol)
राइट ऑपरेशन करने से पहले ट्रांजैक्शन डेटा मान पर लॉक प्राप्त करता है। राइट ऑपरेशन के बाद, लॉक जारी किया जा सकता है। सिम्पलिस्टिक लॉक प्रोटोकॉल का एक उदाहरण:
| T1 | T2 |
|---|---|
| R(A) | |
| R(A) | |
| Lock(B) | |
| R(B) | |
| W(B) | |
| Unlock(B) | |
| Lock(C) | |
| R(C) | |
| W(C) | |
| Unlock(C) | |
| Commit | |
| Commit |
उपरोक्त दो ट्रांजैक्शन T1 और T2 दिखाए गए हैं। रीड ऑपरेशन के लिए कोई लॉक आवश्यक नहीं है लेकिन राइट ऑपरेशन से पहले, प्रत्येक ट्रांजैक्शन एक लॉक प्राप्त करता है और बाद में जारी करता है।
टू-फेज लॉकिंग प्रोटोकॉल (Two-Phase Locking Protocol)
टू-फेज लॉकिंग प्रोटोकॉल के दो चरण होते हैं, अर्थात् ग्रोइंग और श्रिंकिंग फेज। ट्रांजैक्शन केवल ग्रोइंग फेज में होने पर लॉक प्राप्त कर सकता है। जब यह श्रिंकिंग फेज में प्रवेश करता है, तो यह पहले से प्राप्त लॉक जारी कर सकता है लेकिन नए लॉक प्राप्त नहीं कर सकता। एक्सक्लूसिव लॉक्स को X द्वारा और शेयर्ड लॉक्स को S द्वारा दर्शाया जाता है। टू-फेज लॉकिंग प्रोटोकॉल का एक उदाहरण:
| T1 | T2 |
|---|---|
| S(A) | |
| R(A) | |
| S(A) | |
| R(A) | |
| X(B) | |
| R(B) | |
| W(B) | |
| X(C) | |
| R(C) | |
| W(C) | |
| Unlock(C) | |
| Unlock(A) | |
| Unlock(B) | |
| Unlock(A) | |
| Commit | |
| Commit |
उपरोक्त उदाहरण में, T1 और T2 वेरिएबल A को शेयर्ड लॉक का उपयोग करके साझा करते हैं क्योंकि A पर केवल रीड ऑपरेशन किया जाता है। T1 राइट ऑपरेशन के लिए B पर एक्सक्लूसिव लॉक प्राप्त करता है और जल्द ही जारी करता है। T2 C के साथ भी ऐसा ही करता है।
सख्त टू-फेज लॉकिंग प्रोटोकॉल (Strict Two-Phase Locking Protocol)
सख्त टू-फेज लॉकिंग प्रोटोकॉल टू-फेज लॉकिंग प्रोटोकॉल के समान है। एकमात्र अंतर यह है कि सख्त 2PL प्रोटोकॉल में प्रोटोकॉल द्वारा प्राप्त सभी एक्सक्लूसिव लॉक्स को तब तक रखा जाना चाहिए जब तक प्रोटोकॉल कमिट या अबॉर्ट न करे। सख्त टू-फेज लॉकिंग प्रोटोकॉल का एक उदाहरण:
| T1 | T2 |
|---|---|
| S(A) | |
| R(A) | |
| S(A) | |
| R(A) | |
| X(B) | |
| R(B) | |
| W(B) | |
| X(C) | |
| R(C) | |
| W(C) | |
| Unlock(A) | |
| Unlock(A) | |
| Commit | |
| Unlock(B) | |
| Commit | |
| Unlock(C) |
उपरोक्त उदाहरण में, T1 और T2 वेरिएबल A को शेयर्ड लॉक का उपयोग करके साझा करते हैं क्योंकि A पर केवल रीड ऑपरेशन किया जाता है। T1 राइट ऑपरेशन के लिए B पर एक्सक्लूसिव लॉक प्राप्त करता है और T2 C के साथ भी ऐसा ही करता है। एक्सक्लूसिव लॉक्स केवल ट्रांजैक्शन कमिट होने के बाद जारी किए जाते हैं। हालांकि, शेयर्ड लॉक्स के लिए ऐसी कोई बाध्यता नहीं है।
रिगोरस टू-फेज लॉकिंग प्रोटोकॉल (Rigorous Two-Phase Locking Protocol)
रिगोरस टू-फेज लॉकिंग प्रोटोकॉल केवल टू-फेज लॉकिंग प्रोटोकॉल और सख्त टू-फेज लॉकिंग प्रोटोकॉल का विस्तार है। यहां, एक ट्रांजैक्शन द्वारा रखे गए सभी लॉक्स, चाहे शेयर्ड हों या एक्सक्लूसिव, केवल तभी जारी किए जाते हैं जब ट्रांजैक्शन कमिट या अबॉर्ट करता है। रिगोरस टू-फेज लॉकिंग प्रोटोकॉल का एक उदाहरण:
| T1 | T2 |
|---|---|
| S(A) | |
| R(A) | |
| S(A) | |
| R(A) | |
| X(B) | |
| R(B) | |
| W(B) | |
| X(C) | |
| R(C) | |
| W(C) | |
| Commit | |
| Unlock(A) | |
| Unlock(B) | |
| Commit | |
| Unlock(A) | |
| Unlock(C) |
उपरोक्त उदाहरण में, T1 और T2 वेरिएबल A को शेयर्ड लॉक का उपयोग करके साझा करते हैं क्योंकि A पर केवल रीड ऑपरेशन किया जाता है। T1 राइट ऑपरेशन के लिए B पर एक्सक्लूसिव लॉक प्राप्त करता है और T2 C के साथ भी ऐसा ही करता है। शेयर्ड लॉक्स और एक्सक्लूसिव लॉक्स दोनों केवल ट्रांजैक्शन कमिट होने के बाद जारी किए जाते हैं।