Part 2 · ডেটাবেস 📖 ১৩ মিনিট পড়া 📝 ২০টি কুইজ

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 হবে, অথবা কিছুই হবে না।

BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 5000 WHERE id = 1; UPDATE accounts SET balance = balance + 5000 WHERE id = 2; COMMIT;

মাঝপথে fail হলে → ROLLBACK → কোনো change-ই হবে না।

C — Consistency (সঙ্গতি)

Transaction শেষে DB-র সব constraint, rule, foreign key valid থাকবে।

উদাহরণ: Account balance negative হতে পারে না — এই rule transaction-এর আগে ও পরে সত্য থাকবে।

⚠️ মনে রাখুন: এই Consistency CAP theorem-এর Consistency থেকে আলাদা। ACID-এর C = constraint validity; CAP-এর C = সব node-এ same data।

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।

সাধারণ ভুল ধারণা

  1. "ACID = SQL only": না — কিছু NoSQL-ও ACID দেয় (MongoDB 4+)।
  2. "BASE = no consistency": Eventually consistent — কিছু সময় পর ঠিক হবে।
  3. "ACID-এর C = CAP-এর C": না — ভিন্ন। ACID = constraint; CAP = node sync।
  4. "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 দেয়।