ACID
DevOps 🟡 MidDefinition
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.