লক (Locks) 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)
টু-ফেজ লকিং প্রোটোকলে দুটি ফেজ থাকে, iaitu বৃদ্ধি (growing) এবং ক্ষয় (shrinking) ফেজ। ট্রানজ্যাকশন শুধু বৃদ্ধি ফেজে থাকাকালীন লক অর্জন করতে পারে। যখন সেটি ক্ষয় ফেজে প্রবেশ করে, তবে সেটি পূর্বে অর্জিত লকগুলো মুক্ত করতে পারে কিন্তু নতুন লক অর্জন করতে পারে না। এক্সক্লুসিভ লক 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 শেয়ারড লক দিয়ে শেয়ার করে কারণ শুধু রিড অপারেশন করা হয়। T1 B-র ওপর এক্সক্লুসিভ লক অর্জন করে লেখন অপারেশনের জন্য এবং তা শীঘ্রই মুক্ত করে। T2 C-র সাথে একই কাজ করে।
স্ট্রিক্ট টু-ফেজ লকিং প্রোটোকল (Strict Two-Phase Locking Protocol)
স্ট্রিক্ট টু-ফেজ লকিং প্রোটোকল টু-ফেজ লকিং প্রোটোকলের অনুরূপ। একমাত্র পার্থক্য হলো স্ট্রিক্ট 2PL প্রোটোকলে প্রোটোকল দ্বারা অর্জিত সকল এক্সক্লুসিভ লক প্রোটোকল কমিট বা অ bort না হওয়া পর্যন্ত ধরে রাখতে হয়। স্ট্রিক্ট টু-ফেজ লকিং প্রোটোকলের একটি উদাহরণ:
| 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 শেয়ারড লক দিয়ে শেয়ার করে কারণ শুধু রিড অপারেশন করা হয়। T1 লেখন অপারেশনের জন্য B-র ওপর এক্সক্লুসিভ লক অর্জন করে এবং T2 C-র সাথে একই কাজ করে। এক্সক্লুসিভ লকগুলো শুধু ট্রানজ্যাকশন কমিট হওয়ার পর মুক্ত করা হয়। তবে, শেয়ারড লকের জন্য এমন কোনো বাধা নেই।
রিগরাস টু-ফেজ লকিং প্রোটোকল (Rigorous two-phase locking protocol)
রিগরাস টু-ফেজ লকিং প্রোটোকল মাত্র টু-ফেজ লকিং প্রোটোকল এবং স্ট্রিক্ট টু-ফেজ লকিং প্রোটোকলের একটি এক্সটেনশন। এখানে, একটি ট্রানজ্যাকশন által ধারিত সকল লক, শেয়ারড বা এক্সক্লুসিভ, শুধু ট্রানজ্যাকশন কমিট বা অবোর্ট হওয়ার পর মুক্ত করা হয়। রিগরাস টু-ফেজ লকিং প্রোটোকলের একটি উদাহরণ:
| 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 শেয়ারড লক দিয়ে শেয়ার করে কারণ শুধু রিড অপারেশন করা হয়। T1 লেখন অপারেশনের জন্য B-র ওপর এক্সক্লুসিভ লক অর্জন করে এবং T2 C-র সাথে একই কাজ করে। শেয়ারড এবং এক্সক্লুসিভ উভয় লকই শুধু ট্রানজ্যাকশন কমিট হওয়ার পর মুক্ত করা হয়।