Cette page explique comment utiliser l'isolation de lecture répétée dans Spanner.
La lecture répétée 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 simultanéité élevée en lecture/écriture 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 plus rigoureux. Avec sa simultanéité optimiste par défaut, 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 peuvent nécessiter une nouvelle tentative en raison de conflits de sérialisation. Avec la simultanéité pessimiste,
les opérations de lecture utilisent des instantanés, mais des verrous exclusifs s'appliquent aux données lues à partir de requêtes FOR
UPDATE ou d'indications lock_scanned_ranges=exclusive, ainsi qu'aux données écrites avec
des requêtes LMD. La simultanéité pessimiste réduit également la probabilité de conflits d'écriture. Pour en savoir plus, consultez la présentation du niveau d'isolation et
le contrôle de simultanéité.
Définir le niveau d'isolation
Vous pouvez définir le niveau d'isolation sur les 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
C++
C#
REST
Vous pouvez utiliser l'
TransactionOptions.isolation_level
API REST pour définir le niveau d'isolation sur les 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.
Vous pouvez utiliser les pilotes de Spanner pour définir le niveau d'isolation et le mode de verrouillage en lecture en tant que paramètre de connexion au niveau de la connexion ou en tant qu'option d'instruction SET au niveau de la transaction. Pour en savoir plus sur chaque
pilote, consultez la présentation des pilotes.
Vous pouvez également configurer la simultanéité de verrouillage pour chaque niveau d'isolation. Pour en savoir plus, consultez la section Contrôle de simultanéité.
Cas d'utilisation non compatibles
- Vous ne pouvez pas définir l'isolation de lecture répétée sur les transactions LMD partitionnées.
- Toutes les transactions en lecture seule fonctionnent déjà sur un instantané fixe et ne nécessitent pas de verrous. Par conséquent, la définition de l'isolation de lecture répétée dans ce type de transaction ne modifie aucun comportement.
- Vous ne pouvez pas définir l'isolation de lecture répétée sur les opérations en lecture seule, à usage unique et de partition à l'aide des bibliothèques clientes Spanner. Les bibliothèques clientes Spanner n'auront pas la possibilité de définir l'isolation de lecture répétée sur les opérations de requête en lecture seule, à usage unique et de partition.
Étape suivante
En savoir plus sur les niveaux d'isolation.
En savoir plus sur le contrôle de simultanéité.
Découvrez comment utiliser SELECT FOR UPDATE dans l'isolation de lecture répétée.
Pour en savoir plus sur la sérialisabilité et la cohérence externe de Spanner, consultez la section TrueTime et cohérence externe.