Dynamodb批量插入如果项目不存在

7

DynamoDB不支持批量更新,只支持批量写入。

但是,是否可以仅在键不存在的情况下进行批量写入?

1个回答

3
batchWriteItem 中,有以下提示:

例如,您不能在单个 put 和 delete 请求上指定条件,并且 BatchWriteItem 不会在响应中返回已删除的项目。

相反,我建议使用带有条件表达式的 putItem。在 putItem 文档的底部有以下提示:

[...] 为了防止新项目替换现有项目,请使用包含 attribute_not_exists 函数并以用作分区键的属性名称命名的条件表达式。

因此,请确保将以下内容添加到 ConditionExpression(此处使用 NodeJS 语法)中:

const params = {
    Item: {
        userId: {
            S: "Beyonce",
        }
    },
    ConditionExpression: "attribute_not_exists(userId)"
};

4
"put item" 是针对单个项目的,这会导致写入速度变慢。如果批量写入支持项目存在检查,那么多个写入只需要进行一次网络调用,性能更高。 - Shushant Arora
1
@ShushantArora - 相反,您可以使用batchGetItem并检查哪些未返回并将其存储为doesNotExist。 然后使用doesNotExist列表创建您的batchWriteItem请求。 您需要此方法的示例吗? - Daniel Apt
2
为什么要这么复杂呢?亚马逊本可以在批量写入中添加条件表达式,不是吗? - Alexis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接