ACID ও BASE
Database guarantee-এর দুই philosophy।
আপনি ATM-এ ৫,০০০ টাকা তুলেছেন। ব্যাংক আপনার account থেকে টাকা কেটেছে কিন্তু ATM machine টাকা দেয়নি - মাঝপথে power gone। কী হবে? নিশ্চয়ই আপনি চান - হয় টাকা পান, নয় account থেকেই কাটেনা। এটাই ACID-এর মূল প্রতিজ্ঞা।
ACID Properties
ACID = চারটি প্রতিজ্ঞা যা reliable database transaction নিশ্চিত করে। RDBMS-এর core।
A - Atomicity (অখণ্ডতা)
Transaction একটি অবিভাজ্য unit। সব step হবে, অথবা কিছুই হবে না।
মাঝপথে fail হলে → ROLLBACK → কোনো change-ই হবে না।
C - Consistency (সঙ্গতি)
Transaction শেষে DB-র সব constraint, rule, foreign key valid থাকবে।
উদাহরণ: Account balance negative হতে পারে না - এই rule transaction-এর আগে ও পরে সত্য থাকবে।
I - Isolation (পৃথকীকরণ)
Concurrent transaction-গুলো একে অপরকে বিরক্ত করবে না - যেন তারা serialize হয়ে চলছে।
উদাহরণ: A আপনার account থেকে টাকা পড়ছে, একই সময়ে B add করছে - তাদের ফলাফল চাইলেও mix হবে না।
Isolation Levels (কম থেকে বেশি)
- Read Uncommitted: Dirty read possible - অন্য uncommitted transaction-এর data পড়া যায়।
- Read Committed: শুধু committed data read। PostgreSQL default।
- Repeatable Read: একই query একাধিকবার same result। MySQL default।
- Serializable: Strongest - transaction যেন একে একে চলেছে। ধীর।
D - Durability (স্থায়িত্ব)
Commit হওয়ার পর data permanent - power loss, crash-এও থাকবে।
WAL (Write-Ahead Log) এই guarantee-র implementation।
BASE Properties
NoSQL distributed system-এর philosophy। ACID-এর কঠিনতা বদলে - flexible, scalable approach।
B - Basically Available
System সবসময় respond করবে - কিছু না কিছু দেবে। সম্পূর্ণ correct না হলেও available।
A - Soft state
System-এর state input ছাড়াও পরিবর্তন হতে পারে - কারণ replica-গুলো async sync হচ্ছে।
E - Eventually Consistent
সময়ের সাথে সব replica একই state-এ আসবে। তাৎক্ষণিক না হলেও - eventually।
ACID vs BASE
ACID
- Strong consistency
- Pessimistic - locks
- Vertical scale
- Complex transaction
- Banking, finance
- RDBMS
BASE
- Eventually consistent
- Optimistic - flexible
- Horizontal scale
- Simple model
- Social, real-time
- NoSQL
কখন ACID দরকার?
- আর্থিক লেনদেন (banking, payment)।
- Inventory management (stock count)।
- Booking system (seat double booking এড়ানো)।
- Healthcare data।
- Audit trail।
- সর্বদা accuracy > speed।
কখন BASE যথেষ্ট?
- Social media feed (এক সেকেন্ড আগে post late হলে problem না)।
- Like/View count।
- Real-time analytics।
- Search index।
- Caching।
- সর্বদা scale > perfect accuracy।
বাস্তব উদাহরণ
ACID-এর প্রয়োজনীয়তা
ATM-এ টাকা তোলা - atomicity ছাড়া disaster।
- Step 1: account থেকে কাটা
- Step 2: ATM থেকে টাকা বের
- Step 1 হয়ে Step 2 fail = customer-এর টাকা গায়েব!
BASE-এর সুবিধা
Twitter like count - eventually consistent OK।
- আপনি like করেছেন - আমি ১ সেকেন্ড পর দেখব। সমস্যা না।
- কিন্তু সব node-এ sync wait করলে scale ভাঙবে।
আধুনিক হাইব্রিড
Modern সিস্টেমে strict ACID/BASE-এর বদলে tunable consistency:
- MongoDB 4+: Multi-document transactions।
- Cassandra: Tunable consistency level (ONE, QUORUM, ALL)।
- DynamoDB: Strong বা eventual consistency choose।
- Google Spanner: Globally distributed ACID।
সাধারণ ভুল ধারণা
- "ACID = SQL only": না - কিছু NoSQL-ও ACID দেয় (MongoDB 4+)।
- "BASE = no consistency": Eventually consistent - কিছু সময় পর ঠিক হবে।
- "ACID-এর C = CAP-এর C": না - ভিন্ন। ACID = constraint; CAP = node sync।
- "Higher isolation always better": না - ধীর। Use case অনুযায়ী choose।
Best Practices
- Critical operation-এ ACID - payment, inventory।
- Read-heavy real-time data-তে BASE - feed, count।
- Isolation level minimum prefer - Read Committed অনেক case-এ যথেষ্ট।
- Application-এ BASE নির্ভর হলে - UI-তে "syncing..." indicator।
- Mixed approach - primary ACID DB + read replica/cache for BASE-style।
📌 চ্যাপ্টার সারমর্ম
- ACID = Atomicity, Consistency, Isolation, Durability।
- BASE = Basically Available, Soft state, Eventually consistent।
- ACID - RDBMS, banking; BASE - NoSQL, social media।
- Isolation level ৪টি (Uncommitted → Serializable)।
- আধুনিক DB tunable consistency দেয়।