Qu’est-ce qu’une transaction ?
Une transaction est un groupe d’opérations qui ont les propriétés suivantes : atomique, cohérente, isolée et durable (ACID). La prise en charge des transactions permet de développer de nouveaux types d’applications, tout en simplifiant le processus de développement et en rendant l’application plus robuste. Le reste de cette rubrique fournit des scénarios qui illustrent la nécessité de ces propriétés, puis une table qui définit chaque propriété.
Dans un groupe atomique d’opérations, chaque opération du groupe doit réussir, ou les effets de toutes doivent être annulés (également appelés restauration). Par exemple, un virement bancaire doit être un ensemble atomique de deux opérations : un débit d’un compte et un crédit à un autre compte. Le débit et le crédit doivent être implémentés en tant que groupe atomique. Si ces deux opérations ne réussissent pas, le transfert est injustement en faveur de la banque ou du titulaire du compte.
L’exigence de cohérence signifie que les données sont cohérentes après la transaction (en supposant que nous avons commencé avec un système cohérent avant la transaction). Pour l’exemple de transfert bancaire, la cohérence peut être définie comme ayant le solde du compte combiné des deux comptes une constante. Pour implémenter la cohérence dans l’exemple de transfert bancaire, les opérations de débit et de crédit doivent simplement être pour le même montant d’argent.
Un autre exemple de transaction est une mise à jour d’un site web. Un site de commerce électronique exige qu’une nouvelle page de navigation de catégorie de produits apparaisse exactement en même temps que les pages de détails du produit qui décrivent les nouveaux produits. Dans ce cas, il est nécessaire de mettre à jour et d’ajouter plusieurs entrées de répertoire sous le contrôle d’une transaction. Non seulement il est nécessaire que les mises à jour soient atomiques, mais il est également nécessaire qu’un client qui achète actuellement ne puisse pas voir les mises à jour en cours. Il s’agit d’un exemple de la propriété d’isolation des transactions.
La propriété de durabilité exige qu’une fois la mise à jour terminée, ses effets persistent même si le système cesse de répondre. Dans l’exemple précédent, la durabilité peut être fournie simplement en garantissant une récupération des données adéquate afin que toutes les nouvelles entrées de système de fichiers qui représentent l’ajout d’un nouveau produit au site s’affichent une fois qu’un système cesse de répondre. Cela nécessite un système avec des mécanismes de sauvegarde, de récupération et de haute disponibilité des données.
La garantie de l’atomicité d’une transaction, ainsi que d’autres propriétés, est présente face à un nombre quelconque de défaillances, y compris les défaillances qui se produisent pendant la phase de récupération d’une défaillance précédente. Finalement, le système atteint l’un des deux états suivants : toutes les opérations ont été appliquées ou aucune des opérations n’a été appliquée.
Les propriétés d’une transaction sont résumées dans le tableau suivant.
Terme | Description |
---|---|
Atomique |
Toutes les opérations de la transaction réussissent ou aucune des opérations ne persiste. |
Cohérente |
Si les données sont cohérentes avant le début de la transaction, elles le seront une fois la transaction terminée. |
Isolé |
Les effets d’une transaction en cours sont masqués de toutes les autres transactions. |
Durable |
Lorsqu’une transaction se termine, ses résultats sont persistants et survivent à un incident système. |
Ces propriétés garantissent que le logiciel peut gérer les erreurs inattendues, car il peut simplement abandonner une transaction lorsqu’une situation inattendue empêche une exécution réussie. L’infrastructure de transaction garantit que tous les effets de la transaction abandonnée sont restaurés, ce qui retourne les données à un état cohérent. Par conséquent, un système transactionnel permet une récupération appropriée des défaillances du système.
Pour garantir les propriétés ACID, un système qui prend en charge les transactions doit disposer d’une fonctionnalité de journalisation robuste qui peut être utilisée pour valider ou restaurer des transactions si nécessaire. Pour plus d’informations, consultez Common Log File System.