Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 3 / Notion

ACID en pratique

ACID n'est pas un slogan : c'est le contrat qui permet de ne pas vérifier chaque écriture à la main.

◷ 14 minutesTravail sur votre machine

Prérequis (cursus dev) : index et transactions.

Pourquoi

ACID n'est pas un slogan : c'est le contrat qui permet de ne pas vérifier chaque écriture à la main. Comprendre chaque lettre, c'est savoir ce qu'on perd quand on s'en écarte (et quand c'est acceptable).

Concepts

  • Atomicité : tout ou rien (virement débité ET crédité, jamais l'un sans l'autre). En pratique : une transaction, un COMMIT/ROLLBACK.
  • Cohérence : les règles tiennent (contraintes, clés étrangères, CHECK). La base refuse l'incohérent — mieux que 1000 validations applicatives.
  • Isolation : les transactions concurrentes ne se voient pas à moitié (niveaux au cours suivant).
  • Durabilité : committé = survit au crash (WAL — journal d'écriture rejoué au redémarrage). synchronous_commit=off = plus vite, moins sûr : à connaître, pas à activer par défaut.

Exemple : le virement qui ne perd rien

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;  -- les deux ou rien, même si le serveur meurt entre les deux

Cas réel

Débit + crédit en deux requêtes séparées « parce que l'ORM le fait comme ça » : crash entre les deux = 100 € créés ex nihilo, découverts à l'audit 6 mois plus tard. Une transaction : incident impossible par construction.

Pièges

  • Logique « transactionnelle » en applicatif (vérifier puis écrire) : race condition garantie sous concurrence — la base fait ça mieux (contraintes + transactions).
  • Oublier la contrainte en base « l'app vérifie » : l'app change, les imports directs non. La base est le dernier rempart.
  • Transactions géantes (import de 1M de lignes en une) : verrous longs + rollback monstrueux. Découper en lots committés.

À retenir

Une transaction par unité métier, contraintes en base (dernier rempart), lots pour le volume.

Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.