Graphe de précédence

De testwiki
Aller à la navigation Aller à la recherche

Modèle:À wikifier

Un graphe de précédence, également appelé graphe de conflit[1] ou graphe de serializability, est utilisé dans le cadre du concurrency controlModèle: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

Exemple 1

Exemple 1
S=[T1T2R(A)R(A)A=A*5R(B)W(A)B=B+AR(B)W(B)B=B*10W(B)]

Exemple 2

D=R1(A) R2(B) W2(A) Com.2 W1(A) Com.1 W3(A) Com.3

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 Modèle:Lien. 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

Exemple de test de sérialisabilité

Algorithme pour tester la sérialisabilité des conflits d'une annexe S avec un exemple d'horaire.

S=[T1T2T3R(A)W(A)Com.W(A)Com.W(A)Com.]

S=R1(A) W2(A) Com.2 W1(A) Com.1 W3(A) Com.3

  1. 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 .
  2. 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.
  3. 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) ).
  4. 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 .
  5. 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

Modèle:Références

Liens externes

Modèle:Portail