DBMS-এ সঙ্গতি নিয়ন্ত্রণ বজায় রাখার জন্য লকগুলি একটি অবিচ্ছেদ্য অঙ্গ৷ লক ভিত্তিক কনকারেন্সি কন্ট্রোল বাস্তবায়নকারী যেকোন সিস্টেমে একটি লেনদেন প্রয়োজনীয় লকগুলি না পাওয়া পর্যন্ত একটি বিবৃতি পড়তে বা লিখতে পারে না৷
লক ভিত্তিক প্রোটোকলগুলিতে দুই ধরনের লক রয়েছে। এগুলো হল:
- বাইনারী লক - এগুলি শুধুমাত্র দুটি অবস্থায় থাকতে পারে, লক বা আনলক করা।
- শেয়ারড/এক্সক্লুসিভ লক - শেয়ার্ড লকগুলি অর্জিত হয় যখন শুধুমাত্র রিড অপারেশন করা হয়। শেয়ার করা লকগুলি একাধিক লেনদেনের মধ্যে ভাগ করা যেতে পারে কারণ কোনও ডেটা পরিবর্তন করা হচ্ছে না। লেখার অপারেশন সঞ্চালিত হলে একচেটিয়া লক ব্যবহার করা হয়। শুধুমাত্র একচেটিয়া লক ধারণ করা লেনদেনকে ডেটা মান পরিবর্তন করার অনুমতি দেওয়া হয়।
বিভিন্ন লকিং প্রোটোকল হল −
সরল লক প্রোটোকল
লেখার অপারেশন সঞ্চালিত হওয়ার আগে ডেটা মানের লেনদেনের মাধ্যমে একটি লক পাওয়া যায়। লেখার অপারেশনের পরে, লকটি ছেড়ে দেওয়া যেতে পারে। সিম্পলিস্টিক লক প্রোটোকলের একটি উদাহরণ হল:
T1 | T2 |
---|---|
R(A) | |
| R(A) |
লক(B) | |
R(B) | |
W(B) | |
আনলক(B) | |
| লক(C) |
| R(C) |
| W(C) |
| আনলক(C) |
কমিট | |
| কমিট |
উপরে দেখানো T1 এবং T2 দুটি লেনদেন আছে। রিড অপারেশনের জন্য কোন লকের প্রয়োজন নেই কিন্তু লেখার অপারেশনের আগে, এই লেনদেনগুলির প্রতিটি একটি লক অর্জন করে এবং পরে এটি ছেড়ে দেয়৷
টু-ফেজ লকিং প্রোটোকল
দুই-ফেজ লকিং প্রোটোকলের দুটি পর্যায় রয়েছে, যথা ক্রমবর্ধমান এবং সঙ্কুচিত পর্যায়। লেনদেন শুধুমাত্র লকগুলি অর্জন করতে পারে যখন এটি ক্রমবর্ধমান পর্যায়ে থাকে। যখন এটি সঙ্কুচিত পর্যায়ে প্রবেশ করে, এটি পূর্বে অর্জিত লকগুলিকে ছেড়ে দিতে পারে কিন্তু নতুন লকগুলি অর্জন করতে পারে না। এক্সক্লুসিভ লকগুলিকে X দ্বারা এবং ভাগ করা লকগুলিকে S দ্বারা প্রতিনিধিত্ব করা হয়৷ টু ফেজ লকিং প্রোটোকলের একটি উদাহরণ হল −
T1 | T2 |
---|---|
S(A) | |
R(A) | |
| S(A) |
| R(A) |
X(B) | |
R(B) | |
W(B) | |
| X(C) |
| R(C) |
| W(C) |
| আনলক(C) |
| আনলক(A) |
আনলক(B) | |
আনলক(A) | |
কমিট | |
| কমিট |
উপরের উদাহরণে, T1 এবং T2 একটি শেয়ার্ড লক ব্যবহার করে পরিবর্তনশীল A ভাগ করে কারণ A-তে শুধুমাত্র রিড অপারেশন করা হয়। T1 লেখার অপারেশনের জন্য B-এ একটি এক্সক্লুসিভ লক অর্জন করে এবং শীঘ্রই এটি প্রকাশ করে। T2 C এর সাথে একই কাজ করে।
কঠোর দুই-ফেজ লকিং প্রোটোকল
কঠোর দুই ফেজ লকিং প্রোটোকল দুই ফেজ লকিং প্রোটোকলের অনুরূপ। শুধুমাত্র পার্থক্য হল যে কঠোর 2PL প্রোটোকলে প্রোটোকল দ্বারা অর্জিত সমস্ত একচেটিয়া লকগুলিকে ধরে রাখতে হবে যতক্ষণ না প্রোটোকল হয় কমিট বা বাতিল না হয়। স্ট্রিক্ট টু - ফেজ লকিং প্রোটোকলের একটি উদাহরণ হল:
T1 | T2 |
---|---|
S(A) | |
R(A) | |
| S(A) |
| R(A) |
X(B) | |
R(B) | |
W(B) | |
| X(C) |
| R(C) |
| W(C) |
| আনলক(A) |
আনলক(A) | |
কমিট | |
আনলক(B) | |
| কমিট |
| আনলক(C) |
উপরের উদাহরণে, T1 এবং T2 একটি ভাগ করা লক ব্যবহার করে ভেরিয়েবল A ভাগ করে কারণ A-তে শুধুমাত্র রিড অপারেশন সঞ্চালিত হয়। T1 লেখার ক্রিয়াকলাপের জন্য B-তে একটি এক্সক্লুসিভ লক অর্জন করে এবং T2 C-এর সাথে একই কাজ করে। একচেটিয়া লকগুলি শুধুমাত্র প্রকাশ করা হয় লেনদেন সম্পন্ন করার পর। যাইহোক, ভাগ করা লকগুলির জন্য এই ধরনের কোন আবদ্ধ নেই৷
৷কঠোর দুই-ফেজ লকিং প্রোটোকল
কঠোর দুই ফেজ লকিং প্রোটোকল শুধুমাত্র দুই ফেজ লকিং প্রোটোকল এবং কঠোর দুই ফেজ লকিং প্রোটোকলের একটি এক্সটেনশন। এখানে, একটি লেনদেনের দ্বারা ধারণ করা সমস্ত লক, শেয়ার করা বা একচেটিয়া, শুধুমাত্র একবার লেনদেন কমিট বা বাতিল হয়ে গেলেই মুক্তি দেওয়া হয়৷ কঠোর দুই - ফেজ লকিং প্রোটোকলের একটি উদাহরণ হল:
T1 | T2 |
---|---|
S(A) | |
R(A) | |
| S(A) |
| R(A) |
X(B) | |
R(B) | |
W(B) | |
| X(C) |
| R(C) |
| W(C) |
কমিট | |
আনলক(A) | |
আনলক(B) | |
| কমিট |
| আনলক(A) |
| আনলক(C) |
উপরের উদাহরণে, T1 এবং T2 একটি ভাগ করা লক ব্যবহার করে পরিবর্তনশীল A ভাগ করে কারণ A-তে শুধুমাত্র রিড অপারেশন সঞ্চালিত হয়। T1 লেখার ক্রিয়াকলাপের জন্য B-তে একটি এক্সক্লুসিভ লক অর্জন করে এবং T2 C এর সাথে একই কাজ করে। উভয় ভাগ করা লক এবং এক্সক্লুসিভ লকগুলি শুধুমাত্র লেনদেন করার পরেই প্রকাশ করা হয়৷
৷