Graphe de précédence
Apparence
Un graphe de précédence, également appelé graphe de conflit[1] ou graphe de serializability, est utilisé dans le cadre du concurrency control[Quoi ?] dans les bases de données[2].
Le graphe de précédence pour un programme S contient :
- Un nœud pour chaque transaction validée dans S ;
- Un arc de T i à T j si une action de T i précède et entre en conflit avec l'une des actions de T j . Autrement dit, les actions appartiennent à différentes transactions, au moins une des actions est une opération d'écriture et les actions accèdent au même objet (lecture ou écriture).
Exemples d'un graphe de précédence
[modifier | modifier le code]Exemple 1
[modifier | modifier le code]Exemple 2
[modifier | modifier le code]Un graphe de précédence du programme D, avec 3 transactions. Comme il existe un cycle (de longueur 2 ; avec deux arêtes) à travers les transactions validées T1 et T2, cette planification (historique) n'est pas Conflict serializable (en). Notez que le commit de la transaction 2 n'a aucune signification concernant la création d'un graphe de priorité.
Test de la sérialisabilité avec le graphe de précédence
[modifier | modifier le code]Algorithme pour tester la sérialisabilité des conflits d'une annexe S avec un exemple d'horaire.
- Pour chaque transaction T x participant à l'horaire S, créez un nœud étiqueté T i dans le graphe de priorité. Ainsi le graphe de précédence contient T 1, T 2, T 3 .
- Pour chaque cas dans S où T j exécute un read_item (X) après que T i exécute un write_item (X), créez une arête (T i → T j ) dans le graphe de priorité. Cela ne se produit nulle part dans l'exemple ci-dessus, car il n'y a pas de lecture après écriture.
- Pour chaque cas dans S où T j exécute un write_item (X) après que T i ait exécuté un read_item (X), créez une arête (T i → T j ) dans le graphe de priorité. Il en résulte un bord dirigé de T 1 à T 2 (car T 1 a R(A) avant T 2 a W(A) ).
- Pour chaque cas dans S où T j exécute un write_item (X) après que T i exécute un write_item (X), créez une arête (T i → T j ) dans le graphe de priorité. Il en résulte des fronts dirigés de T 2 vers T 1, T 2 vers T 3 et T 1 vers T 3 .
- L'ordonnancement S est sérialisable si et seulement si le graphe de précédence n'a pas de cycles. Comme T 1 et T 2 constituent un cycle, l'exemple ci-dessus n'est pas (conflit) sérialisable.
Références
[modifier | modifier le code]Liens externes
[modifier | modifier le code]- The Fundamentals of Database Systems, 5th Edition, l'utilisation des graphes de précédence est abordée au chapitre 17, car ils se rapportent aux tests de Conflict serializability (en).
- Abraham Silberschatz (en), Henry Korth et S. Sudarshan. 2005. Concepts du système de base de données (5 éd. ), PP. 628–630. McGraw-Hill, Inc., New York, NY, États-Unis.