ACID vs BASE Transactions
Consistency Models
ACID and BASE represent opposing philosophies for database consistency. ACID guarantees strict consistency while BASE prioritizes availability.
ACID Properties
Atomicity, Consistency, Isolation, Durability:
-- ACID transaction example
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
BASE Properties
Basically Available, Soft state, Eventual consistency:
class EventualConsistentLedger:
def __init__(self):
self.pending = []
def transfer(self, sender, recipient, amount):
self.pending.append({
"sender": sender, "recipient": recipient,
"amount": amount, "timestamp": time.time()
})
return {"status": "accepted"}
def reconcile(self):
for tx in self.pending:
self.apply_transaction(tx)
When to Relax ACID
| Requirement | ACID | BASE | |-------------|------|------| | Consistency | Strong | Eventual | | Availability | Lower | Higher | | Latency | Higher | Lower | | Use case | Financial | Analytics |
Conclusion
Choose ACID where correctness is critical and BASE where scale matters. Modern databases increasingly blur the line. Understand your consistency requirements and choose accordingly.