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 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. 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. Para obtener más información, consulta Descripción general del nivel de aislamiento.
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
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 aislamiento serializable.
Limitaciones
El siguiente conjunto de limitaciones existe en la versión preliminar del aislamiento de lectura repetible.
- Es posible que experimentes problemas si tu esquema tiene
restricciones de verificación.
- Existe un problema conocido que impide que se validen las restricciones de verificación, lo que puede generar incumplimientos de restricciones cuando se confirman las transacciones. Por lo tanto, no recomendamos usar el aislamiento de lectura repetible en la versión preliminar si tu esquema tiene restricciones de verificación.
- Es posible que experimentes problemas si se producen cambios de esquema simultáneos en tu base de datos mientras se ejecutan las transacciones.
- Si tus instrucciones DML usan la
last_statementopción y se produce un cambio de esquema simultáneo mientras se ejecuta la declaración DML, es posible que se vuelva a intentar internamente y muestre un error que indique que la DML se volvió a intentar de forma incorrecta después de que se estableció lalast_statementopción. Volver a intentar la transacción después de que se aplica el cambio de esquema resuelve este problema. - Si las solicitudes de una transacción experimentan un error
DEADLINE_EXCEEDEDdel cliente, vuelve a intentar la transacción después de que se aplique el cambio de esquema para resolver el problema.
- Si tus instrucciones DML usan la
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 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.
Aprende a usar SELECT FOR UPDATE en el aislamiento de lectura repetible.
Obtén más información sobre la serialización y la coherencia externa de Spanner. Consulta TrueTime y coherencia externa.