Isolation

Besoin

Garantir l'indépendance d'opérations travaillant sur les mêmes données.

Analyse

Idéalement l'isolation doit être maximale : j'aimerai pouvoir travailler sur des données sans me soucier d'autres transactions.

Conception

Dans la pratique, le niveau d'isolation idéal (maximal) est souvent trop contraignant car il implique que chaque transaction passe après une autre (aucun parallélisme des travaux). Pour pallier ce problème, on accepte de perdre une partie de l'isolation au profit d'un meilleur parallélisme, et donc d'une meilleure performance.

Niveau Nom Description Solution contre
0 Read uncommitted lectures non valides : Je lis pendant ma transaction des données peut-être issues d'autres transactions et susceptibles d'être annulées (si une des autres transaction finit par annuler ses modifications typiquement). -
1 Read committed Lectures valides : Je lis pendant ma transaction uniquement des données issues de transactions achevées (validées ou annulées). Je ne vois pas les données modifiées par des transactions encore non achevées. Cela évite les Lectures sales (dirty reads), où je lis les données de travail d'autres transactions, potentiellement fausses (annulables par ces autres transactions).
2 Repeatable read Lectures répétables : Pendant ma transaction ce que je lis ne sera pas modifiable par d'autres transactions. Cela évite des lectures non répétables (non-repeteable reads), où je lis pour de mêmes données des valeurs différentes (issues des modifications d'autres transactions) alors que je ne les ai pas modifiées dans ma transaction.
3 Sérialisable Ordonnancement : Mes lectures ne sont pas du tout impactées par les autres transactions Lectures fantômes (phantom reads), où des enregistrements apparaissent (insertions par d'autres transactions) ou disparaissent (supression par d'autres transactions) pendant ma transaction.

Implémentation

JDBC permet de spécifier le niveau d'isolation via Connection.setTransactionIsolation(), dans le cas d'environnement non-géré ou de persistance manuelle dans un environnement géré (EJB BMP typiquement).

En environnement géré (EJB CMP par exemple), la spécification du niveau d'isolation n'est pas supportée par le standard (sauf EJB 1.0) et le niveau d'isolation utilisé doit être paramétré de manière propriétaire dans la base de données accédée ou via un paramétrage spécifique au serveur applicatif (WAS 4.x par exemple).

Notes

Limitations