Isolation & its Levels (ACID)
ডেটাবেস ট্রানজেকশনের ক্ষেত্রে Isolation হলো একটি প্রসেস যা নিশ্চিত করে যে একটি ট্রানজেকশন অন্য ট্রানজেকশনের ওপর প্রভাব ফেলবে না। ডিস্ট্রিবিউটেড সিস্টেমে এবং কনকারেন্ট সিস্টেমে এটি বোঝা খুবই জরুরি।
Isolation কি?
সহজ কথায়, একই সময়ে যখন হাজার হাজার ইউজার ডেটাবেসে ডেটা রাইট বা রিড করতে চায়, তখন তারা যেন একে অপরের কাজে বাধা না দেয় বা ভুল ডেটা না দেখে, সেটিই আইসোলেশন।
আইসোলেশন লেভেলসমূহ (Read Phenomena)
আইসোলেশন লেভেল বোঝার আগে ৩টি কমন সমস্যা জানা প্রয়োজন:
- Dirty Read: এমন ডেটা রিড করা যা এখনো ড্রাফটে আছে (অন্য ট্রানজেকশন কমীট করেনি)।
- Non-repeatable Read: একই ট্রানজেকশনে দুইবার রিড করলে ভিন্ন ডেটা পাওয়া।
- Phantom Read: নতুন কোনো রো (Row) যুক্ত হওয়ার কারণে কুয়েরি রেজাল্ট বদলে যাওয়া।
৪টি প্রধান আইসোলেশন লেভেল
১. Read Uncommitted
এটি সবচেয়ে দুর্বল লেভেল। এখানে অন্য ট্রানজেকশনের কমীট না হওয়া (Dirty) ডেটাও পড়া যায়। এটি খুব ফাস্ট কিন্তু অনির্ভরযোগ্য।
২. Read Committed
এখানে শুধুমাত্র কমীট হওয়া ডেটা পড়া যায়। এটি 'Dirty Read' সমস্যা সমাধান করে কিন্তু 'Non-repeatable read' রয়ে যায়। এটি অনেক ডেটাবেসের (যেমন: PostgreSQL, SQL Server) ডিফল্ট লেভেল।
৩. Repeatable Read
একই ট্রানজেকশনে আপনি যতবারই একই ডেটা রিড করবেন, তা সবসময় একই থাকবে। এটি 'Non-repeatable read' সমাধান করে। MySQL এর ডিফল্ট লেভেল এটিই।
৪. Serializable
এটি সবচেয়ে কঠোর এবং শক্তিশালী লেভেল। এটি ট্রানজেকশনগুলোকে এমনভাবে চালায় যেন তারা একের পর এক (Serial) ঘটছে। এটি সব ধরনের রিড সমস্যা (Dirty, Non-repeatable, Phantom) সমাধান করে। তবে এটি সিস্টেমকে অনেক স্লো করে দেয়।
তুলনা টেবিল
| লেভেল | Dirty Read | Non-repeatable Read | Phantom Read | পারফরম্যান্স |
|---|---|---|---|---|
| Read Uncommitted | সম্ভব | সম্ভব | সম্ভব | সর্বোচ্চ |
| Read Committed | সমাধান | সম্ভব | সম্ভব | ভালো |
| Repeatable Read | সমাধান | সমাধান | সম্ভব | মাঝারি |
| Serializable | সমাধান | সমাধান | সমাধান | সর্বনিম্ন |
TIP
রিয়েল-ওয়ার্ল্ড অ্যাপ্লিকেশনে সাধারণত Read Committed বা Repeatable Read ব্যবহার করা হয়। Serializable শুধুমাত্র খুব ক্রিটিক্যাল এবং সেনসিটিভ ডেটার ক্ষেত্রে ব্যবহৃত হয়।