本页面介绍了 Spanner 批量写入请求以及如何使用 修改 Spanner 数据。
您可以使用 Spanner 批量写入功能执行插入、更新或删除操作 在 Spanner 表中插入多行。Spanner 批量写入支持无需读取操作的低延迟写入, 因为批量应用变更。要使用批量写入,请将 将相关更改组合在一起,即同时提交一个组中的所有更改 以原子方式进行。跨组的更改以未指定顺序应用,并且 彼此独立(非原子化)。Spanner 不需要 等待所有变更应用完成后再发送响应,这意味着 批量写入允许部分失败。你还可以将多个批次 一次写入数据。如需了解详情,请参阅如何使用批量写入。
使用场景
Spanner 批量写入特别适用于以下情况: 进行大量写入而不执行读取操作,但不需要原子化 针对所有变更的事务。
如果要批量处理 DML 请求,请使用批量 DML 修改 Spanner 数据。如需详细了解 请参阅比较 DML 和变更。
对于单一变更请求,我们建议使用锁定读写 交易。
限制
Spanner 批量写入存在以下限制:
Spanner 批量写入无法使用 Google Cloud 控制台或 Google Cloud CLI。它仅支持 REST 和 RPC API 和 Spanner Java 客户端库。
重放攻击防范 不支持使用批量写入。有可能 并且多次应用的变更 都会导致测试失败例如,如果重放插入更改, 产生的错误,或者如果您使用 Terraform 和 commit 基于时间戳的键,这可能会导致额外的行被 已添加到表格中。我们建议在设计写入操作时遵循幂等原则。 可以避免这个问题
您无法回滚已完成的批量写入请求。您可以取消 进行中的批量写入请求。如果您取消正在进行的批量写入, 未完成组中的更改将回滚。已完成组中的变更 提交到数据库
批量写入请求的大小上限与 提交请求。如需了解详情,请参阅 与创建、读取、更新和删除数据相关的限制。
如何使用批量写入
如需使用批量写入,您必须拥有以下项目的 spanner.databases.write
权限:
要修改的数据库您可以批量写入变更
使用 REST 在单个调用中以非原子方式执行
或 RPC API
请求调用。
使用批量写入时,您应将以下变更类型组合在一起:
- 在父级和子级中插入具有相同主键前缀的行 表格。
- 通过表之间的外键关系将行插入表中。
- 其他类型的相关变更,具体取决于您的数据库架构和 应用逻辑
您还可以使用 Spanner Java 客户端库批量写入。
以下代码示例使用新行更新 Singers
表。
Java
后续步骤
- 详细了解 Spanner 事务。