Esta página descreve as solicitações de gravação em lote do Spanner e como usá-las para modificar seus dados do Spanner.
É possível usar a gravação em lote do Spanner para inserir, atualizar ou excluir várias linhas nas tabelas do Spanner. A gravação em lote do Spanner oferece suporte a gravações de baixa latência sem uma operação de leitura e retorna respostas à medida que as mutações são aplicadas em lotes. Para usar a gravação em lote, agrupe mutações relacionadas, e todas as mutações em um grupo serão confirmadas atomicamente. As mutações em todos os grupos são aplicadas em uma ordem não especificada e são independentes umas das outras (não atômicas). O Spanner não precisa esperar que todas as mutações sejam aplicadas antes de enviar uma resposta, o que significa que a gravação em lote permite falhas parciais. Também é possível executar várias gravações em lote por vez. Para mais informações, consulte Como usar a gravação em lote.
Casos de uso
A gravação em lote do Spanner é especialmente útil se você quiser confirmar um grande número de gravações sem uma operação de leitura, mas não exigir uma transação atômica para todas as suas mutações.
Se quiser agrupar suas solicitações de DML, use a DML em lote para modificar os dados do Spanner. Para mais informações sobre as diferenças entre DML e mutações, consulte Comparar DML e mutações.
Para solicitações de mutação única, recomendamos usar uma transação de leitura/gravação de bloqueio.
Limitações
A gravação em lote do Spanner tem as seguintes limitações:
A gravação em lote do Spanner não está disponível usando o consoleGoogle Cloud ou a Google Cloud CLI. Ela só está disponível usando APIs REST e RPC e as bibliotecas de cliente do Spanner.
A proteção contra repetição não é compatível com a gravação em lote. É possível que as mutações sejam aplicadas mais de uma vez, e uma mutação aplicada mais de uma vez pode resultar em uma falha. Por exemplo, se uma mutação de inserção for reproduzida, ela poderá gerar um erro de "já existe". Se você usar chaves geradas ou baseadas em carimbos de data/hora de commit na mutação, isso poderá resultar na adição de mais linhas à tabela. Recomendamos estruturar suas gravações para que sejam idempotentes e evitar esse problema.
Não é possível reverter uma solicitação de gravação em lote concluída. Você pode cancelar uma solicitação de gravação em lote em andamento. Se você cancelar uma gravação em lote em andamento, as mutações em grupos não concluídos serão revertidas. As mutações em grupos concluídos são confirmadas no banco de dados.
O tamanho máximo de uma solicitação de gravação em lote é o mesmo limite de uma solicitação de confirmação. Para mais informações, consulte Limites para criar, ler, atualizar e excluir dados.
Como usar a gravação em lote
Para usar a gravação em lote, você precisa ter a permissão spanner.databases.write
no banco de dados que quer modificar. É possível gravar mutações em lote
de forma não atômica em uma única chamada usando uma chamada de solicitação
da API REST
ou RPC.
Agrupe os seguintes tipos de mutação ao usar a gravação em lote:
- Inserir linhas com o mesmo prefixo de chave primária nas tabelas mãe e filha.
- Inserir linhas em tabelas com uma relação de chave externa entre elas.
- Outros tipos de mutações relacionadas, dependendo do esquema do banco de dados e da lógica do aplicativo.
Também é possível fazer gravações em lote usando as bibliotecas de cliente do Spanner.
O exemplo de código a seguir atualiza a tabela Singers
com novas linhas.
Bibliotecas de cliente
Java
Go
Nó
Python
C++
A seguir
- Saiba mais sobre as transações do Spanner.