如果项目不存在,则 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 上进行有条件的放置

如果条目已存在,如何防止覆盖 DynamoDB 项目

文件操作

可以将HASH密钥更新为预先存在的Dynamodb全局二级索引的另一个属性吗?

我可以使用 AWS Data Pipeline 在每次放置之前合并 dynamoDB 和编辑项目吗?

如果不存在,则通过将 spring Jpa 与 hibernate 一起使用来创建模式