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áneas. 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 estar modificando. Con 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 concurrencia pesimista, las operaciones de lectura usan instantáneas, pero se aplican bloqueos exclusivos 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.
Cómo establecer 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 a nivel de la transacción con los siguientes métodos:
Bibliotecas cliente
Go
Java
Node.js
Python
C++
C#
REST
Puedes usar la API de REST de TransactionOptions.isolation_level para establecer el nivel de aislamiento en 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 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 admitidos
- No puedes establecer el aislamiento de lectura repetible en transacciones de DML particionado.
- 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 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 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.
Obtén más información para 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.