H2 Database এর Concurrency এবং Lock Management অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন একাধিক ট্রানজাকশন একই সময়ে ডেটাবেজে কাজ করে। Concurrency management নিশ্চিত করে যে একাধিক ট্রানজাকশন সমান্তরালভাবে কার্যকরীভাবে চলতে পারে, এবং Lock management এটি নিশ্চিত করে যে একাধিক ট্রানজাকশন একই ডেটা পরিবর্তন না করে।
H2 ডেটাবেজে Concurrency এবং Locking এর মাধ্যমে ডেটাবেজের বিভিন্ন রেকর্ডের ওপর একাধিক ট্রানজাকশন নিরাপদভাবে কাজ করতে পারে। এই পদ্ধতিটি ACID (Atomicity, Consistency, Isolation, Durability) প্রপার্টিজ নিশ্চিত করতে সাহায্য করে।
Concurrency হল একাধিক ট্রানজাকশন একে অপরের সাথে সমান্তরালভাবে কাজ করা, যখন ডেটাবেজে বিভিন্ন রেকর্ড একাধিক ট্রানজাকশন দ্বারা অ্যাক্সেস করা হয়। H2 ডেটাবেজে concurrency management নিশ্চিত করতে Isolation Levels এবং Locking Mechanisms ব্যবহার করা হয়।
Locking হল একটি প্রক্রিয়া যা একাধিক ট্রানজাকশন একসাথে একই ডেটা অ্যাক্সেস করতে বাধা দেয়। H2 ডেটাবেজে Row-level Locking এবং Table-level Locking দুই ধরনের lock management ব্যবহৃত হয়।
H2 ডেটাবেজে বিভিন্ন Isolation Levels রয়েছে, যা ডেটার অ্যাক্সেসের পৃথকীকরণকে নিয়ন্ত্রণ করে। Isolation Levels নির্ধারণ করে ট্রানজাকশনগুলো একে অপরের কার্যক্রমের উপর কতটা প্রভাব ফেলতে পারে।
H2 এ Isolation Level পরিবর্তন করা:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
এটি ট্রানজাকশন চলাকালীন Serializable Isolation Level নির্ধারণ করবে, যাতে সমস্ত ট্রানজাকশন একে অপরের থেকে পৃথক থাকবে।
H2 ডেটাবেজে লক ব্যবস্থাপনা করতে দুই ধরনের লকিং ব্যবহার করা হয়:
এই পদ্ধতিতে, H2 ডেটাবেজ শুধুমাত্র সংশ্লিষ্ট রেকর্ডকে লক করে, যা কার্যকরীভাবে একাধিক ট্রানজাকশনকে একই সময়ে ভিন্ন ভিন্ন রেকর্ডে কাজ করার অনুমতি দেয়।
উদাহরণ:
যদি দুটি ট্রানজাকশন একে অপরের সাথে বিভিন্ন রেকর্ড আপডেট করার চেষ্টা করে, তবে Row-level Locking নিশ্চিত করবে যে তারা একে অপরকে বাধা না দেয়।
এই পদ্ধতিতে, যখন একটি ট্রানজাকশন একটি টেবিলের ওপর কাজ করে, তখন টেবিলটির সমস্ত রেকর্ডই লক হয়ে যায়। অন্য ট্রানজাকশন একই টেবিলের সাথে কাজ করতে পারবে না যতক্ষণ না প্রথম ট্রানজাকশন সম্পন্ন হয়।
ধরা যাক, একটি ট্রানজাকশন "User A" এর অ্যাকাউন্ট থেকে টাকা কেটে "User B" এর অ্যাকাউন্টে ট্রান্সফার করার চেষ্টা করছে। যদি একই সময়ে দুটি ট্রানজাকশন ঘটে, তবে H2-র Row-level Locking নিশ্চিত করবে যে এক ট্রানজাকশন অন্যটিকে ব্লক করবে না, এবং একই ডেটা পরিবর্তন করতে বাধা দেওয়া হবে।
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;
এই কোডের মাধ্যমে, একক ট্রানজাকশন চালানো হচ্ছে, যেখানে Row-level Locking এই ডেটা পরিবর্তনের সময় নিশ্চিত করবে যে অন্য কোনো ট্রানজাকশন একই রেকর্ড পরিবর্তন করার চেষ্টা করছে না।
Deadlock তখন ঘটে যখন দুটি বা তার বেশি ট্রানজাকশন একে অপরকে ব্লক করে রাখে, এবং একটি ট্রানজাকশন কখনও শেষ হতে পারে না। H2 ডেটাবেজ deadlock detection এর মাধ্যমে এ ধরনের সমস্যার সমাধান করতে সক্ষম, এবং এতে rollback করে deadlock নিরসন করা হয়।
H2 ডেটাবেজে Concurrency এবং Lock Management কার্যকরীভাবে পরিচালনা করার জন্য Isolation Levels, Row-level Locking, এবং Table-level Locking ব্যবহৃত হয়। এই পদ্ধতিগুলি নিশ্চিত করে যে একাধিক ট্রানজাকশন নিরাপদ এবং স্বতন্ত্রভাবে কাজ করতে পারে, এবং ডেটাবেজে কোনো অসঙ্গতি বা দ্বন্দ্ব না ঘটে। H2 এর Locking ও Concurrency management-এর মাধ্যমে, ডেটাবেজের কার্যক্ষমতা এবং নিরাপত্তা একসাথে বজায় থাকে।
common.read_more