【发布时间】:2022-12-21 14:49:23
【问题描述】:
我有一个需要批量插入或更新 dynamodb 请求的用例,但我找不到解决它的方法。欢迎任何建议,谢谢。
我的用例
- 用例 #1:对于用户实体,我们将发送添加/更新/删除请求
- 用例 #2:对于 Credit 实体,无论是否存在记录,我们都只会发送更新请求。
并且用例 #1 和 #2 混合在一起,我们需要将它们一起批处理。
我尝试了如下几种方法:
使用 batchWrite
问题是我们只能批处理PutRequest和DeleteRequest。它非常适合Use case #2,因为如果那里没有记录,PutRequest 将创建一个。如果有,PutRequest 将完全替换它。但它不太适合Use case #1,因为对于Update User请求,它只会将修改后的列留在数据库中。例如,如果我只更新名称列,PutRequest 将完全替换,只保留名称列。是的,我们可以在更新时提供所有的列,但这并不理想。
使用 PartiQL
PartiQL 不支持批处理 Insert Update Delete 语句。它很适合Use case #1,但不适合Use case #2。例如,如果我只使用Insert,当已经存在记录时,Insert会报重复错误。如果我只用Update,如果不存在记录,Update会报条件请求错误。如果我将Insert和Update放在一起,PartiQL会抱怨两个语句不能指向同一条记录。而且我认为PartiQL 不会支持存储过程、插入或更新之前的查询。
概括
无论如何,如果没有更好的方法,我将不得不使用batchWrite并将所有列放入更新请求中。它并不理想,但它是可行的,不像 PartiQL 方法,它没有绕过 Use case #2。
【问题讨论】:
标签: amazon-dynamodb