ACID vs BASE
- ●ACID (Atomicity, Consistency, Isolation, Durability) SQL database-এ শক্ত correctness নিশ্চিত করে।
- ●BASE (Basically Available, Soft state, Eventual consistency) NoSQL-এ availability ও scale-কে অগ্রাধিকার দেয়।
- ●টাকা-পয়সার মতো জায়গায় ACID, বিশাল scale ও availability দরকার হলে BASE বেছে নাও।
সমস্যাটা কী?
ভাবো তুমি bKash-এ এক বন্ধুকে ৫০০ টাকা পাঠাচ্ছ। কাজটা আসলে দুটো ধাপ: তোমার ব্যালেন্স থেকে ৫০০ কমানো, আর বন্ধুর ব্যালেন্সে ৫০০ যোগ করা। এখন যদি প্রথম ধাপ হয়ে দ্বিতীয় ধাপের আগে সার্ভার crash করে—তোমার টাকা কমে গেল কিন্তু বন্ধু পেল না! ৫০০ টাকা হাওয়া। এমন ভুল কোনোভাবেই গ্রহণযোগ্য নয়।
আবার ভাবো Facebook-এ একটা পোস্টের like count। ১০ লাখ মানুষ একসাথে like দিচ্ছে। এখানে count যদি এক সেকেন্ডের জন্য একজনের কাছে 5,001 আর আরেকজনের কাছে 5,003 দেখায়—কেউ মাথা ঘামাবে না। এখানে দরকার গতি আর সবসময় চালু থাকা, নিখুঁত সংখ্যা নয়।
এই দুই ধরনের চাহিদা থেকেই দুটো philosophy: ACID (কড়া নির্ভুলতা) আর BASE (নমনীয়তা ও availability)।
মূল ধারণা
ACID হলো traditional SQL database-এর গ্যারান্টি যা প্রতিটি transaction-কে নির্ভুল, নিরাপদ ও সম্পূর্ণ রাখে। BASE হলো বহু NoSQL system-এর approach যা strict consistency-র বদলে high availability ও scalability-কে অগ্রাধিকার দেয়, এবং consistency-কে "eventual" হিসেবে মেনে নেয়।
একটা Transaction মানে এক বা একাধিক operation-এর একটা গুচ্ছ, যা একটি একক unit হিসেবে সফল বা ব্যর্থ হয়। ACID সেই transaction-কে নিরাপদ রাখার চারটি নিয়ম।
কীভাবে কাজ করে
ACID-এর চারটি অক্ষর
| অক্ষর | অর্থ | মানে কী |
|---|---|---|
| A – Atomicity | অবিভাজ্যতা | সব ধাপ হবে, নয়তো একটাও না (all-or-nothing); ব্যর্থ হলে rollback |
| C – Consistency | সঙ্গতি | Transaction-এর পর database সবসময় বৈধ নিয়ম মেনে চলবে (যেমন ব্যালেন্স ঋণাত্মক হবে না) |
| I – Isolation | বিচ্ছিন্নতা | একসাথে চলা transaction একে অপরকে ব্যাঘাত দেবে না; ফল এমন হবে যেন একটার পর একটা চলেছে |
| D – Durability | স্থায়িত্ব | একবার commit হলে data স্থায়ী—বিদ্যুৎ গেলেও থাকবে |
bKash-এর উদাহরণে: Atomicity নিশ্চিত করে দুটো ধাপ একসাথে হয় বা একটাও হয় না, তাই টাকা হাওয়া হয় না।
BASE-এর তিনটি অংশ
- Basically Available: সিস্টেম প্রায় সবসময় উত্তর দেবে—হয়তো একটু পুরোনো বা আংশিক data দিয়ে, কিন্তু "down" হবে না।
- Soft state: কোনো লেখা না এলেও system-এর state সময়ের সাথে বদলাতে পারে (replica-রা নিজেদের মধ্যে sync করতে থাকে)।
- Eventual consistency: সাময়িকভাবে আলাদা data থাকতে পারে, কিন্তু কিছু সময় পর সব node একই data-তে মিলে যায়।
দুটোর সরাসরি তুলনা
| দিক | ACID | BASE |
|---|---|---|
| Consistency | Strong (সাথে সাথে) | Eventual (কিছু পরে) |
| Availability | তুলনামূলক কম (consistency-র জন্য) | খুব বেশি |
| Scale | সাধারণত vertical (শক্তিশালী একক সার্ভার) | horizontal (অনেক সার্ভার) |
| উপযুক্ত | আর্থিক, inventory, booking | social feed, analytics, IoT, caching |
| উদাহরণ DB | PostgreSQL, MySQL, Oracle | Cassandra, DynamoDB, Riak |
ACID হলো ব্যাংকের ক্যাশ কাউন্টার। ক্যাশিয়ার তোমার টাকা গুনে, খাতায় লিখে, সিল মেরে তবেই "হয়ে গেছে" বলবে—একটা ধাপ বাদ পড়লে পুরো লেনদেন বাতিল। ধীর হলেও নিখুঁত।
BASE হলো এলাকার মুদি দোকানের বাকির খাতা। তুমি বাকিতে জিনিস নিলে দোকানদার হয়তো এখনই খাতায় না লিখে পরে লেখে; তার ভাই দোকানে থাকলে সে হয়তো এখনো জানে না তুমি কত বাকি নিয়েছ (সাময়িক inconsistency)। কিন্তু দিনশেষে হিসাব মিলে যায় (eventual consistency)। দ্রুত আর সবসময় চালু—তবে এক মুহূর্তের জন্য হিসাব নাও মিলতে পারে।
কখন কোনটা ব্যবহার করবে
ACID বেছে নাও যখন
- টাকা, payment, ব্যাংকিং, accounting।
- Inventory/booking—যেখানে একটাই seat/product দু'জনকে বিক্রি করা যাবে না।
- যেকোনো জায়গায় যেখানে ভুল বা হারানো data বড় ক্ষতি করে।
BASE বেছে নাও যখন
- বিশাল scale ও প্রচুর traffic, যেখানে availability সবচেয়ে গুরুত্বপূর্ণ।
- Social feed, like/view count, recommendation, logging, analytics, IoT sensor data।
- সাময়িক সামান্য inconsistency মেনে নেওয়া যায়।
"NoSQL মানেই BASE আর SQL মানেই ACID"—এটা পুরোপুরি সত্য নয়, একটা অতি-সরলীকরণ। আজকাল অনেক NoSQL (যেমন MongoDB) transaction ও strong consistency option দেয়, আর অনেক distributed SQL (যেমন CockroachDB, Google Spanner) বিশাল scale-এও ACID দেয়। তাই database-এর label দেখে সিদ্ধান্ত নিও না—তোমার data-র জন্য আসলে কোন consistency ও availability দরকার, সেটা ঠিক করে তারপর tool বেছো। মনে রাখো, এর পেছনে CAP theorem-এর trade-off কাজ করছে: network partition-এ consistency আর availability-র মধ্যে একটা বেছে নিতেই হয়।
বাস্তব উদাহরণ
- ব্যাংক / bKash / Nagad: লেনদেনের core অংশ ACID-compliant database-এ থাকে—কারণ এক পয়সাও এদিক-ওদিক হওয়া চলবে না।
- Amazon DynamoDB: Amazon-এর shopping cart-এর মতো high-availability জিনিসের জন্য তৈরি একটি BASE-ভিত্তিক system; এটি availability-কে এত গুরুত্ব দেয় যে কখনো সাময়িক inconsistency মেনে নেয় (তাদের বিখ্যাত Dynamo পেপারের ভিত্তি)।
- Facebook: একই কোম্পানিতে দুটোই—messaging/checkout-এর মতো অংশে strong consistency, আর news feed/like count-এ eventual consistency। অর্থাৎ একটাই app-এ চাহিদা অনুযায়ী দুই approach মেশানো হয়।
Interview-তে "SQL না NoSQL?" জিজ্ঞেস করলে কখনো অন্ধভাবে একটা বেছো না। বলো: "এটা নির্ভর করছে—data-টা কি আর্থিক/transactional (তাহলে ACID/SQL), নাকি বিশাল scale ও availability দরকার যেখানে সাময়িক inconsistency চলে (তাহলে BASE/NoSQL)?" এই trade-off ভাষায় বললেই interviewer বুঝবে তুমি tool নয়, requirement থেকে চিন্তা করছ।
মূল শব্দ (Key Terms)
মিনি কুইজ
1. ACID-এর 'A' (Atomicity) বলতে কী বোঝায়?
2. BASE-এর 'Eventual Consistency' মানে কী?
3. নিচের কোন ক্ষেত্রে ACID সবচেয়ে জরুরি?