Cette page explique comment utiliser l'isolation de lecture reproductible dans Spanner.
Repeatable read est un niveau d'isolation qui garantit que toutes les opérations de lecture d'une transaction voient un instantané cohérent de la base de données tel qu'il existait au début de la transaction. Dans Spanner, ce niveau d'isolation est implémenté à l'aide d'une technique également appelée isolation d'instantané. Cette approche est utile dans les scénarios de concurrence lecture-écriture élevée, où de nombreuses transactions lisent des données que d'autres transactions peuvent modifier. En utilisant un instantané fixe, la lecture répétée évite les impacts sur les performances du niveau d'isolation sérialisable, qui est plus rigoureux. Les lectures peuvent s'exécuter sans acquérir de verrous et sans bloquer les écritures simultanées, ce qui réduit potentiellement le nombre de transactions abandonnées qui pourraient devoir être relancées en raison de conflits de sérialisation. Pour en savoir plus, consultez Présentation des niveaux d'isolation.
Définir le niveau d'isolation
Vous pouvez définir le niveau d'isolation des transactions en lecture-écriture au niveau du client de base de données ou au niveau de la transaction à l'aide des méthodes suivantes :
Bibliothèques clientes
Go
Java
Node.js
Python
REST
Vous pouvez utiliser l'API REST TransactionOptions.isolation_level pour définir le niveau d'isolation des transactions en lecture/écriture et en lecture seule au niveau de la transaction. Les options valides sont TransactionOptions.SERIALIZABLE et TransactionOptions.REPEATABLE_READ. Par défaut, Spanner définit le niveau d'isolation sur l'isolation sérialisable.
Limites
L'ensemble de limites suivant existe dans la version bêta de l'isolation de lecture reproductible.
- Vous risquez de rencontrer des problèmes si votre schéma comporte des contraintes de vérification.
- Un problème connu empêche la validation des contraintes de vérification, ce qui peut entraîner des violations de contraintes lors de l'exécution des transactions. Par conséquent, nous vous déconseillons d'utiliser l'isolation de lecture reproductible en aperçu si votre schéma comporte des contraintes de vérification.
- Des problèmes peuvent survenir si des modifications simultanées du schéma ont lieu dans votre base de données pendant l'exécution des transactions.
- Si vos instructions LMD utilisent l'option
last_statementet qu'une modification simultanée du schéma se produit pendant l'exécution de l'instruction LMD, celle-ci peut faire l'objet d'une nouvelle tentative en interne et renvoyer une erreur indiquant que la nouvelle tentative LMD a été effectuée de manière incorrecte après la définition de l'optionlast_statement. Le problème peut être résolu en réessayant la transaction après l'application de la modification du schéma. - Si les requêtes d'une transaction rencontrent une erreur
DEADLINE_EXCEEDEDdu client, réessayez la transaction après l'application de la modification du schéma pour résoudre le problème.
- Si vos instructions LMD utilisent l'option
Cas d'utilisation non compatibles
- Vous ne pouvez pas définir l'isolation de lecture reproductible sur les transactions LMD partitionnées.
- Toutes les transactions en lecture seule fonctionnent déjà à un instantané fixe et ne nécessitent pas de verrous. Par conséquent, la définition de l'isolation de lecture reproductible dans ce type de transaction ne modifie aucun comportement.
- Vous ne pouvez pas définir l'isolation de lecture reproductible sur les opérations de lecture seule, à usage unique et de partition à l'aide des bibliothèques clientes Spanner. Les bibliothèques clientes Spanner ne permettent pas de définir l'isolation de lecture reproductible sur les opérations de requête de lecture seule, à usage unique et de partition.
Étapes suivantes
En savoir plus sur les niveaux d'isolation
Découvrez comment utiliser SELECT FOR UPDATE dans l'isolation de lecture répétable.
Pour en savoir plus sur la sérialisabilité et la cohérence externe de Spanner, consultez TrueTime et cohérence externe.