Partager via


Sérialisabilité

Dans l’idéal, les transactions doivent être sérialisables. Les transactions sont considérées comme sérialisables si les résultats des transactions en cours d’exécution sont identiques aux résultats de leur exécution en série , c’est-à-dire l’un après l’autre. Il n’est pas important que la transaction s’exécute en premier, mais que le résultat ne reflète aucun mélange des transactions.

Par exemple, supposons que la transaction A multiplie les valeurs de données par 2 et que la transaction B ajoute 1 aux valeurs de données. Supposons maintenant qu’il existe deux valeurs de données : 0 et 10. Si ces transactions sont exécutées l’une après l’autre, les nouvelles valeurs sont 1 et 21 si la transaction A est exécutée en premier, ou 2 et 22 si la transaction B est exécutée en premier. Mais que se passe-t-il si l’ordre dans lequel les deux transactions sont exécutées est différent pour chaque valeur ? Si la transaction A est exécutée en premier sur la première valeur et que la transaction B est exécutée en premier sur la deuxième valeur, les nouvelles valeurs sont 1 et 22. Si cet ordre est inversé, les nouvelles valeurs sont 2 et 21. Les transactions sont sérialisables si 1, 21 et 2, 22 sont les seuls résultats possibles. Les transactions ne sont pas sérialisables si 1, 22 ou 2, 21 sont un résultat possible.

Pourquoi la sérialisabilité est-elle souhaitable ? En d’autres termes, pourquoi est-il important qu’une transaction se termine avant le démarrage de la transaction suivante ? Tenez compte du problème suivant. Un vendeur entre des commandes en même temps qu’un commis envoie des factures. Supposons que le vendeur entre dans une commande de la société X, mais qu’il ne le valide pas ; le vendeur parle toujours au représentant de la société X. Le commis demande une liste de toutes les commandes ouvertes et découvre la commande pour la société X et les envoie une facture. Maintenant, le représentant de la société X décide qu’ils veulent modifier leur commande, de sorte que le vendeur le modifie avant de valider la transaction. La société X obtient une facture incorrecte.

Si les transactions du vendeur et du commis étaient sérialisables, ce problème n’aurait jamais eu lieu. Soit la transaction du vendeur aurait terminé avant le début de la transaction du commis, auquel cas le commis aurait envoyé la facture correcte, ou la transaction du commis aurait terminé avant le début de la transaction du vendeur, auquel cas le commis n’aurait pas envoyé de facture à la société X du tout.