ACID

DevOps 🟡 Mid

Définition

Propriétés des transactions relationnelles. Atomicité (tout ou rien), Cohérence, Isolation (pas d'interférence), Durabilité (persisté après commit).

Analogie

Un virement bancaire : soit les deux comptes sont mis à jour, soit aucun. Pas de demi-transfert.

Exemple de code

const trx = await db.transaction();
try {
  await trx('accounts').where({ id: from }).decrement('balance', amount);
  await trx('accounts').where({ id: to }).increment('balance', amount);
  await trx.commit();
} catch (e) {
  await trx.rollback();
}

Cas d'usage

Garantir l'intégrité des données financières, commandes, stocks.

Anti-pattern

Faire deux requêtes séparées au lieu d'une transaction : incohérence si crash entre les deux.
#devops#database#interview

En entretien

  1. Explique-moi ce que veut dire ACID pour une transaction.

    Atomicité (tout ou rien), Cohérence, Isolation (pas d'interférence entre transactions) et Durabilité (persisté après commit). L'exemple classique est le virement bancaire : soit les deux comptes sont mis à jour, soit aucun.

  2. Quel est le risque si je fais deux requêtes séparées au lieu d'une transaction ?

    C'est l'anti-pattern : en cas de crash entre les deux requêtes, on obtient une incohérence, par exemple un compte débité sans que l'autre soit crédité. Il faut englober les deux opérations dans une transaction avec commit/rollback.

  3. Dans quel contexte l'ACID est-il particulièrement critique ?

    Pour garantir l'intégrité des données financières, des commandes et des stocks. Le code type utilise trx.commit() en cas de succès et trx.rollback() en cas d'erreur pour ne jamais laisser un état intermédiaire.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre