Concurrence
13 avril 2005
Le problème
Ingénierie des bases de données
Concurrence
Verrouillage Estampillage
Nécessité d'exécuter les programmes et requêtes de façon concurrente Garantir que l’exécution simultanée de plusieurs programmes se fait correctement
Cohérence de la base de données Exécution correcte des programmes
Exemples de contextes hautement concurrentiels: annuaires téléphoniques (accès en lecture) systèmes de réservation de billets (lecture et mise à jour)
2
Programmes
Transactions
Trois problèmes à éviter
(1) Perte de mise à jour temps t1 t2 t3 t4 programme P1 Lire A Lire A Ecrire A Ecrire A La mise à jour faite par P1 est perdue
3 4
Transaction = unité de programme exécutée sur SGBD ordre sql = une transaction
programme P2
Programme (PL-SQL par ex.)
Début Transaction
Accès à la base de données (lectures, écritures) Calculs en mémoire centrale
Fin Transaction : COMMIT ou ROLLBACK
Commit : exécution correcte Rollback : exécution incorrecte
validation effacement
Autre exemple de problème à éviter
(2) Données fantômes temps t1 t2 t3 t4 programme P1 Lire A Ecrire A Lire A Rollback P2 voit une valeur de A qui n’existe pas
5
Autre exemple de problème à éviter
(3) analyse incohérente temps t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 programme P1 Lire A sum:=A Lire B sum:=sum+B programme P2 t1 Sum 0 A 40 B 50 C 30 t2 Sum 40 A 40 B 50 C 30 t4 Sum 90 A 40 B 50 C 30
programme P2
Lire C Lire A Transférer 10 de C vers A t7 Sum 90 A 50 B 50 C 20 COMMIT Lire C sum:=sum+C !! Sum aurait dû être = à 120 t10 Sum 110 A 50 B 50 C 20
6
Cours Ingénierie des bases de données
1
LBD - C. Vangenot
13 avril 2005
Programmes
Début Transaction
Transactions
Propriétés des transactions : ACID
Atomicité
opérations : tout ou rien
Transaction = unité de programme exécutée sur SGBD Accès à la base de données (lectures, écritures) Calculs en mémoire centrale Fin Transaction : COMMIT ou