En esta página, se describen las solicitudes de escritura por lotes de Spanner y cómo puedes usarlas para modificar tus datos de Spanner.
Puedes usar la escritura por lotes de Spanner para insertar, actualizar o borrar varias filas en tus tablas de Spanner. La escritura por lotes de Spanner admite escrituras de baja latencia sin una operación de lectura y muestra respuestas a medida que se aplican mutaciones en lotes. Para usar la escritura por lotes, agrupa las mutaciones relacionadas y todas las mutaciones de un grupo se confirman de forma atómica. Las mutaciones en los grupos se aplican en un orden no especificado y son independientes entre sí (no atómicos). Spanner no necesita esperar a que se apliquen todas las mutaciones antes de enviar una respuesta, lo que significa que la escritura por lotes permite una falla parcial. También puedes ejecutar varias escrituras por lotes a la vez. Para obtener más información, consulta Cómo usar la escritura por lotes.
Casos de uso
La escritura por lotes de Spanner es especialmente útil si deseas confirmar una gran cantidad de escrituras sin una operación de lectura, pero no necesitas una transacción atómica para todas tus mutaciones.
Si quieres agrupar las solicitudes DML por lotes, usa batch DML para modificar los datos de Spanner. Para obtener más información sobre las diferencias entre el DML y las mutaciones, consulta Compara el DML y las mutaciones.
Para las solicitudes de mutación única, te recomendamos que uses una transacción de bloqueo de lectura y escritura.
Limitaciones
La escritura por lotes de Spanner tiene las siguientes limitaciones:
La escritura por lotes de Spanner no está disponible mediante la consola de Google Cloud ni Google Cloud CLI. Solo está disponible si usas las APIs de REST y RPC y la biblioteca cliente de Java para Spanner.
La protección contra la repetición no se admite con la escritura por lotes. Es posible que se apliquen más de una vez, y una mutación que se aplique más de una vez podría generar un error. Por ejemplo, si se vuelve a reproducir una mutación de inserción, puede producir un error que ya existe, o, si usas claves basadas en la marca de tiempo generadas o confirmadas en la mutación, puede provocar que se agreguen filas adicionales a la tabla. Te recomendamos estructurar las escrituras para que sean idempotentes a fin de evitar este problema.
No puedes revertir una solicitud de escritura por lotes completada. Puedes cancelar una solicitud de escritura por lotes en curso. Si cancelas una escritura por lotes en curso, las mutaciones en los grupos no completados se revierten. Las mutaciones en los grupos completados se confirman en la base de datos.
El tamaño máximo de una solicitud de escritura por lotes es el mismo que el límite de una solicitud de confirmación. Para obtener más información, consulta Límites para crear, leer, actualizar y borrar datos.
Cómo usar la escritura por lotes
Para usar la escritura por lotes, debes tener el permiso spanner.databases.write
en la base de datos que quieres modificar. Puedes escribir mutaciones por lotes de forma no atómica en una sola llamada mediante una llamada de solicitud a REST o a la API de RPC.
Debes agrupar los siguientes tipos de mutación cuando uses la escritura por lotes:
- Insertar filas con el mismo prefijo de clave primaria en las tablas superiores y secundarias
- Insertar filas en tablas con una relación de clave externa entre ellas
- Otros tipos de mutaciones relacionadas según el esquema de la base de datos y la lógica de la aplicación
También puedes escribir por lotes con la biblioteca cliente de Spanner para Java.
En el siguiente ejemplo de código, se actualiza la tabla Singers
con filas nuevas.
Java
¿Qué sigue?
- Obtén más información sobre las transacciones de Spanner.