Atomicité (systèmes de bases de données) - Atomicity (database systems)

Dans les systèmes de base de données , l' atomicité ( / ˌ æ t ə m ɪ s ə t i / ; du grec ancien : ἄτομος , romanisé ATOMOS , allumé   'indivisible') est l' un des ACID ( atomicité, cohérence , isolation , durabilité ) propriétés de transaction . Une transaction atomique est une série indivisible et irréductible d'opérations de base de données telles que soit tout se produit, soit rien ne se produit. Une garantie d'atomicité empêche les mises à jour de la base de données ne se produisant que partiellement, ce qui peut causer de plus grands problèmes que le rejet pur et simple de la série entière. En conséquence, la transaction ne peut pas être observée comme étant en cours par un autre client de base de données. À un moment donné, cela ne s'est pas encore produit, et au suivant, cela s'est déjà produit en totalité (ou rien ne s'est passé si la transaction a été annulée en cours).

Un exemple de transaction atomique est un transfert monétaire du compte bancaire A vers le compte B.Il se compose de deux opérations, retirer l'argent du compte A et l'enregistrer sur le compte B.L'exécution de ces opérations dans une transaction atomique garantit que la base de données reste dans un état cohérent , c'est-à-dire que l'argent n'est ni perdu ni créé si l'une ou l'autre de ces deux opérations échoue.

Le même terme est également utilisé dans la définition de la première forme normale dans les systèmes de base de données, où il fait plutôt référence au concept selon lequel les valeurs des champs ne peuvent pas consister en plusieurs valeurs plus petites à décomposer, comme une chaîne dans laquelle plusieurs noms, nombres , des dates ou d'autres types peuvent être emballés.

Orthogonalité

L'atomicité ne se comporte pas complètement orthogonalement par rapport aux autres propriétés ACID des transactions. Par exemple, l' isolement repose sur l'atomicité pour annuler les modifications en cas d'échecs d'isolement tels qu'un blocage ; la cohérence repose également sur la restauration en cas de violation de cohérence par une transaction illégale. Enfin, l'atomicité elle-même repose sur la durabilité pour assurer l'atomicité des transactions même face à des défaillances externes.

En conséquence, l'échec de la détection des erreurs et de la restauration de la transaction englobante peut entraîner des échecs d'isolement et de cohérence.

Mise en œuvre

En règle générale, les systèmes implémentent Atomicity en fournissant un mécanisme pour indiquer quelles transactions ont commencé et lesquelles se sont terminées; ou en conservant une copie des données avant toute modification ( lecture-copie-mise à jour ). Plusieurs systèmes de fichiers ont développé des méthodes pour éviter d'avoir à conserver plusieurs copies de données, en utilisant la journalisation (voir journalisation du système de fichiers ). Les bases de données implémentent généralement cela en utilisant une forme de journalisation / journalisation pour suivre les modifications. Le système synchronise les journaux (souvent les métadonnées ) si nécessaire une fois les modifications effectuées. Ensuite, la récupération après incident ignore les entrées incomplètes. Bien que les implémentations varient en fonction de facteurs tels que les problèmes de concurrence, le principe de l'atomicité - c'est-à-dire succès complet ou échec complet - demeure.

En fin de compte, toute implémentation au niveau de l'application repose sur les fonctionnalités du système d'exploitation . Au niveau du système de fichiers, les systèmes compatibles POSIX fournissent des appels système tels que open(2) et flock(2) qui permettent aux applications d'ouvrir ou de verrouiller un fichier de manière atomique. Au niveau du processus, les threads POSIX fournissent des primitives de synchronisation adéquates.

Le niveau matériel nécessite des opérations atomiques telles que Test-and-set , Fetch-and-add , Compare-and-swap ou Load-Link / Store-Conditional , ainsi que des barrières de mémoire . Les systèmes d'exploitation portables ne peuvent pas simplement bloquer les interruptions pour implémenter la synchronisation, car le matériel qui manque d'exécution simultanée, comme l' hyper-threading ou le multi-traitement, est désormais extrêmement rare.

Voir également

Les références