如果项目不存在,则 Dynamodb 批量放置
Posted
技术标签:
【中文标题】如果项目不存在,则 Dynamodb 批量放置【英文标题】:Dynamodb batch put if item does not exist 【发布时间】:2018-06-16 07:04:57 【问题描述】:DynamoDb 不支持批量更新,只支持批量放置。
但是是否可以只对不存在键的项目进行批处理?
【问题讨论】:
【参考方案1】:在batchWriteItem
中,有如下注释:
例如,您不能对单个 put 和 delete 请求指定条件,并且 BatchWriteItem 不会在响应中返回已删除的项目。
相反,我建议将putItem
与条件表达式一起使用。在putItem
文档的底部有以下注释:
[...] 要防止新项目替换现有项目,请使用 包含
attribute_not_exists
函数的条件表达式 将属性的名称用作分区键 表 [...]
所以请确保将以下内容添加到ConditionExpression
(此处使用 NodeJS 语法)
const params =
Item:
userId:
S: "Beyonce",
,
ConditionExpression: "attribute_not_exists(userId)"
;
【讨论】:
put item 是针对单个 item 的,这会使写入变慢,如果批量写入支持 item 存在,检查它会是多次写入的单个网络调用,并且性能更快。 @ShushantArora - 相反,您可以batchGetItem
并检查哪些未返回并将其存储为doesNotExist
。然后使用doesNotExist
列表创建您的batchWriteItem
请求。您需要这种方法的示例吗?
是的,为什么亚马逊可以在批量写入中添加条件表达式时会如此复杂?以上是关于如果项目不存在,则 Dynamodb 批量放置的主要内容,如果未能解决你的问题,请参考以下文章
使用带有全局二级索引的 boto3 在 dynamodb 上进行有条件的放置
可以将HASH密钥更新为预先存在的Dynamodb全局二级索引的另一个属性吗?