Cum să înțelegi proprietățile ACID în baze de date
In this tutorial, you'll learn about Cum să înțelegi proprietățile ACID în baze de date. We cover key concepts, practical examples, and best practices.
Cum să înțelegi proprietățile ACID (Atomicitate, Consistență, Izolare, Durabilitate) în baze de date relaționale și de ce sunt esențiale pentru integritatea datelor în tranzacții concurente.
Problema
Când mai multe tranzacții rulează simultan sau când o tranzacție eșuează la jumătate, datele pot ajunge într-o stare coruptă. Fără garanțiile ACID, aplicațiile financiare, de inventory sau booking ar pierde constant integritatea datelor.
The Wrong Way
Executarea operațiilor fără a înțelege implicațiile asupra consistenței:
-- Utilizatorul A verifică disponibilitatea
SELECT stock FROM products WHERE id = 1; -- stock = 1
-- Utilizatorul B cumpără ultimul produs
-- Utilizatorul A plasează comanda
UPDATE products SET stock = 0 WHERE id = 1;
-- Problema: ambii utilizatori cred că au cumpărat ultimul produs
Fără izolare (isolation), cele două tranzacții interferează. Fără atomicitate, o eroare la mijloc lasă datele inconsistent.
The Right Way
Garanțiile ACID oferite de bazele de date relaționale:
Atomicitate — Totul sau nimic
O tranzacție se execută integral sau se anulează complet:
BEGIN;
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
-- Eroare aici (ex: constraint violation)
ROLLBACK; -- soldul contului 1 este restaurat
Consistență — Datele respectă regulile
Tranzacțiile transformă baza de date dintr-o stare validă în alta. Constrângerile (UNIQUE, FOREIGN KEY, CHECK) sunt verificate:
CREATE TABLE accounts (
id INT PRIMARY KEY,
balance DECIMAL(10,2) CHECK (balance >= 0)
);
BEGIN;
UPDATE accounts SET balance = -500 WHERE id = 1;
-- EROARE: CHECK constraint violation
ROLLBACK;
Izolare — Tranzacțiile nu se interferează
Nivelurile de izolare (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE) controlează vizibilitatea modificărilor între tranzacții:
-- Sesiunea 1
BEGIN;
UPDATE products SET stock = stock - 1 WHERE id = 1;
-- Încă nu am dat COMMIT
-- Sesiunea 2 (READ COMMITTED)
SELECT stock FROM products WHERE id = 1;
-- Va vedea valoarea veche (stock neschimbat)
Durabilitate — Datele persistă după COMMIT
Odată ce tranzacția face COMMIT, datele sunt scrise pe disk și supraviețuiesc restartului sau căderii sistemului:
BEGIN;
INSERT INTO audit_log (event) VALUES ('payment_received');
COMMIT;
-- Chiar dacă serverul cade acum, acest rând persistă
Step-by-Step Fix
1. Alege nivelul de izolare potrivit
-- PostgreSQL: setează nivelul de izolare
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- Cele mai comune nivele:
-- READ COMMITTED (default PostgreSQL) - previne dirty reads
-- REPEATABLE READ - previne și non-repeatable reads
-- SERIALIZABLE - previne și phantom reads
2. Verifică consistența cu constrângeri
ALTER TABLE orders
ADD CONSTRAINT positive_total CHECK (total >= 0);
3. Asigură durabilitatea
În PostgreSQL, parametrul fsync controlează durabilitatea. Setează synchronous_commit = on pentru garanție maximă.
Prevention Tips
- Alege READ COMMITTED pentru aplicații web uzuale
- Folosește SERIALIZABLE doar când ai nevoie de garanția maximă și suporți performanța redusă
- Verifică constrângerile (CHECK, UNIQUE) corespunzător modelului de date
- Nu dezactiva
fsyncîn producție — riști pierderea datelor la crash
Greșeli comune cu ACID
- Confundarea atomicității cu izolarea — sunt proprietăți distincte
- READ UNCOMMITTED în producție — permite dirty reads, pierzi integritatea
- Ignorarea constrângerilor — date corupte ajung în baza de date
- Nivel de izolare prea ridicat — SERIALIZABILE scade drastic concurența
- Asumarea că o bază NoSQL este ACID — majoritatea bazelor NoSQL sacrifică ACID pentru scalabilitate
Exercițiu practic
Creează un scenariu care demonstrează dirty read (când o tranzacție citește date necommited de la alta), apoi configurează READ COMMITTED pentru a-l preveni.
FAQ
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează nativ cu bazele de date pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro