En esta página, se describe cómo usar el aislamiento de lectura repetible en Spanner.
La lectura repetible es un nivel de aislamiento que
garantiza que todas las operaciones de lectura dentro de una transacción vean una instantánea coherente
de la base de datos tal como existía al comienzo de la transacción. En Spanner, este nivel de aislamiento se implementa con una técnica que también se conoce comúnmente como aislamiento de instantánea. Este enfoque es beneficioso en situaciones de alta simultaneidad de lectura y escritura en las que numerosas transacciones leen datos que otras transacciones podrían modificar. Mediante el uso de una instantánea fija, la lectura repetible evita los impactos en el rendimiento del nivel de aislamiento serializable más riguroso. Con su simultaneidad optimista predeterminada, las lecturas se pueden ejecutar sin adquirir bloqueos y sin bloquear las escrituras simultáneas, lo que genera potencialmente menos transacciones anuladas que podrían necesitar reintentarse debido a conflictos de serialización. Con la simultaneidad pesimista,
las operaciones de lectura usan instantáneas, pero los bloqueos exclusivos se aplican a los datos leídos de las consultas FOR
UPDATE o las sugerencias lock_scanned_ranges=exclusive, y a los datos escritos con
consultas DML. La simultaneidad pesimista también reduce la probabilidad de conflictos de escritura-escritura. Para obtener más
información, consulta Descripción general del nivel de aislamiento y
Control de simultaneidad.
Establece el nivel de aislamiento
Puedes establecer el nivel de aislamiento en las transacciones de lectura y escritura a nivel del cliente de la base de datos o de la transacción con los siguientes métodos:
Bibliotecas cliente
Go
Java
Node.js
Python
C++
C#
PHP
Ruby
REST
Puedes usar la
TransactionOptions.isolation_level
API de REST para establecer el nivel de aislamiento en las transacciones de lectura y escritura y de solo lectura
a nivel de la transacción. Las opciones válidas son TransactionOptions.SERIALIZABLE y TransactionOptions.REPEATABLE_READ. De forma predeterminada, Spanner establece el nivel de aislamiento en el aislamiento serializable.
Puedes usar los controladores de Spanner para establecer el nivel de aislamiento y el modo de bloqueo de lectura como un parámetro de conexión a nivel de la conexión o como una opción de instrucción SET a nivel de la transacción. Para obtener más información sobre cada
controlador, consulta Descripción general de los controladores.
También puedes configurar la simultaneidad de bloqueo para cada nivel de aislamiento. Para obtener más información, consulta Control de simultaneidad.
Casos de uso no compatibles
- No puedes establecer el aislamiento de lectura repetible en las transacciones DML particionadas.
- Todas las transacciones de solo lectura ya operan en una instantánea fija y no requieren bloqueos, por lo que establecer el aislamiento de lectura repetible en este tipo de transacción no cambia ningún comportamiento.
- No puedes establecer el aislamiento de lectura repetible en las operaciones de solo lectura, de un solo uso y de partición con las bibliotecas cliente de Spanner. Las bibliotecas cliente de Spanner no tendrán la opción de establecer el aislamiento de lectura repetible en las operaciones de consulta de solo lectura, de un solo uso y de partición.
¿Qué sigue?
Obtén más información sobre los niveles de aislamiento.
Obtén información sobre el control de simultaneidad.
Aprende a usar SELECT FOR UPDATE en el aislamiento de lectura repetible.
Para obtener más información sobre la serialización y la coherencia externa de Spanner, consulta TrueTime y coherencia externa.