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 দেয়।