0Pricing
Coding Interview Prep · Lezione

Spiegazione delle proprietà ACID

Atomicità, coerenza, isolamento e durabilità con esempi concreti.

Spiegazione delle proprietà ACID è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.

Perché gli intervistatori chiedono di ACID

Quando un intervistatore senior dice «mi spieghi ACID», non sta verificando se ha memorizzato quattro parole. Vuole sapere se comprende che cosa un database garantisce quando molti utenti vi accedono contemporaneamente.

ACID sta per Atomicità, Consistenza, Isolamento e Durabilità. Ogni database transazionale (Postgres, MySQL/InnoDB, SQL Server, Oracle) garantisce queste quattro proprietà per le operazioni racchiuse in una transazione.

Le risposte migliori collegano ogni lettera a un errore concreto che quella proprietà previene. Nelle prossime schermate faremo esattamente questo.

Che cos'è una transazione?

Una transazione è un'unità di lavoro che il database tratta come un'unica operazione indivisibile. La si avvia con BEGIN, si esegue una o più istruzioni e poi si usa COMMIT per renderla permanente oppure ROLLBACK per annullare tutto.

L'esempio classico è un bonifico bancario: addebitare un conto e accreditarne un altro. Devono riuscire entrambe le operazioni oppure nessuna delle due. La transazione è il contenitore che consente di garantire questo comportamento.

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

A = Atomicità

Atomicità significa che una transazione segue il principio «tutto o niente». Se un'istruzione fallisce o il server si arresta nel frattempo, ogni modifica della transazione viene annullata, come se non fosse mai iniziata.

Nell'esempio del bonifico, se l'accredito fallisce dopo che l'addebito è riuscito, l'atomicità garantisce che anche l'addebito venga annullato. Non si perde mai denaro a causa di un'operazione rimasta a metà.

Formulazione da colloquio: "L'atomicità garantisce che la transazione venga eseguita interamente oppure non venga eseguita affatto, senza lasciare uno stato parziale."

L'atomicità in azione

In questo caso, il secondo aggiornamento viola un vincolo di controllo (il saldo non può diventare negativo). Il database interrompe la transazione e ROLLBACK annulla anche il primo aggiornamento.

Il punto chiave da ricordare per i colloqui è questo: dopo il rollback, il conto 1 ha ancora il saldo originale. Nella tabella non rimane alcuna scrittura parziale.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- next line fails: balance would go below 0
UPDATE accounts SET balance = balance - 999999 WHERE id = 2;
ROLLBACK;  -- account 1 is restored to its original balance

C = Consistenza

Consistenza significa che una transazione porta il database da uno stato valido a un altro stato valido. Ogni transazione confermata deve rispettare tutte le regole definite: vincoli, chiavi esterne, trigger e operazioni a cascata.

Se una transazione lasciasse un vincolo violato (una chiave esterna orfana, una chiave primaria duplicata o un CHECK non superato), il database rifiuterebbe di confermarla.

Una precisazione da menzionare: il database applica le regole dichiarate, ma gli invarianti a livello applicativo ("un utente può avere al massimo 3 sessioni attive") sono responsabilità dell'applicazione, a meno che non vengano modellati come vincoli.

Consistenza garantita dai vincoli

La consistenza deriva soprattutto dall'insieme delle regole dello schema. Di seguito, una chiave esterna garantisce che non si possa mai inserire un ordine per un cliente inesistente.

Se l'inserimento fa riferimento a un cliente mancante, la transazione fallisce, l'atomicità la annulla e la consistenza viene preservata. È per questo che nei colloqui si dice che atomicità e consistenza lavorano insieme.

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT NOT NULL REFERENCES customers(id),
  amount NUMERIC(10,2) CHECK (amount > 0)
);

-- This fails if customer 999 does not exist, keeping data consistent
INSERT INTO orders (id, customer_id, amount) VALUES (1, 999, 50.00);

I = Isolamento

Isolamento significa che le transazioni concorrenti non interferiscono tra loro. Idealmente, ogni transazione si comporta come se fosse eseguita da sola, anche quando ne vengono eseguite contemporaneamente a decine.

Nella pratica, i database offrono diversi livelli di isolamento che bilanciano il rigore e le prestazioni. I livelli più deboli consentono alcune anomalie (letture sporche e letture fantasma) in cambio di una maggiore concorrenza.

Questa è la parte più articolata di qualsiasi colloquio su ACID, quindi le prossime due lezioni trattano in dettaglio i livelli di isolamento e le anomalie di lettura.

Perché l'isolamento è uno spettro

Un isolamento perfetto (SERIALIZABLE) è costoso, perché deve impedire ogni possibile conflitto dovuto all'interleaving, spesso bloccando o annullando le transazioni.

Per questo lo standard SQL definisce quattro livelli. Un errore comune nei colloqui è pensare che l'isolamento sia binario. Non è così: si sceglie esplicitamente il livello di rigore desiderato.

  • READ UNCOMMITTED il più debole
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE il più forte
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
-- ... business logic ...
COMMIT;

D = Durabilità

Durabilità significa che, una volta confermata una transazione, le sue modifiche sopravvivono a arresti anomali, interruzioni di corrente e riavvii. Una transazione confermata si trova su una memoria stabile.

I database ottengono questo risultato tramite un write-ahead log (WAL): le modifiche vengono scritte in un log persistente prima di aggiornare i file dei dati. Al riavvio, il motore riproduce il log per recuperare il lavoro confermato che non era ancora stato scritto nei file principali.

Formulazione da colloquio: "La durabilità è garantita dal WAL; il commit restituisce il controllo solo dopo che il record del log è stato scaricato sul disco."

Riunire il bonifico bancario

Un singolo bonifico mette alla prova tutte e quattro le proprietà contemporaneamente:

  • Atomicità: entrambi gli aggiornamenti vengono applicati oppure nessuno dei due.
  • Consistenza: un CHECK mantiene i saldi non negativi.
  • Isolamento: una lettura concorrente non vede un bonifico eseguito solo a metà.
  • Durabilità: dopo COMMIT, i nuovi saldi sopravvivono a un arresto anomalo.

Saper collegare un singolo esempio a tutte e quattro le lettere è esattamente ciò che permette di ottenere punti in un colloquio.

BEGIN;
UPDATE accounts SET balance = balance - 100
  WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Domande frequenti di approfondimento

Nei colloqui si esplorano spesso i casi limite. Si prepari a rispondere a domande come queste:

  • "Quale proprietà impone una chiave esterna?" La consistenza.
  • "Che cosa protegge da un arresto del server durante una transazione?" L'atomicità (rollback delle operazioni non confermate) più la durabilità (riproduzione delle operazioni confermate).
  • "L'isolamento è gratuito?" No, un isolamento più forte riduce la concorrenza.
  • "I database NoSQL garantiscono ACID?" Molti sacrificano queste proprietà in favore della disponibilità (BASE); la risposta dipende dal motore.

Verifica rapida

Verifichi di aver compreso la funzione di ciascuna proprietà ACID.

Riepilogo: ACID in un respiro

Ora può rispondere in modo chiaro:

  • Atomicità - tutto o niente; il lavoro parziale viene annullato.
  • Consistenza - ogni commit rispetta i vincoli e lascia uno stato valido.
  • Isolamento - le transazioni concorrenti non si corrompono a vicenda; il livello di rigore è configurabile.
  • Durabilità - i dati confermati sopravvivono agli arresti anomali, grazie al write-ahead log.

Colleghi ogni lettera a un guasto concreto che previene e supererà senza difficoltà l'inizio di qualsiasi colloquio sulla concorrenza.

Domande Frequenti

La lezione «Spiegazione delle proprietà ACID» è gratuita?

Sì — il testo completo di «Spiegazione delle proprietà ACID» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.

Cosa imparerò in «Spiegazione delle proprietà ACID»?

Atomicità, coerenza, isolamento e durabilità con esempi concreti. Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Coding Interview Prep?

Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Spiegazione delle proprietà ACID»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?

Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Spiegazione delle proprietà ACID
  2. I quattro livelli di isolamento
  3. Letture sporche, non ripetibili e fantasma
  4. Deadlock, locking e MVCC
← Torna a Coding Interview Prep