gpt4 book ai didi

amazon-web-services - DynamoDB 更新是否具有强一致性?

转载 作者:行者123 更新时间:2023-12-03 09:36:52 24 4
gpt4 key购买 nike

DynamoDB 快速且可扩展的全部原因是基于它最终一致的事实。但同时,它也带有这个ConsistentRead操作选项,如 get , batchGet , 和 query这可以帮助您确保您正在阅读的数据是最新的。

我的问题是关于 update手术。首先,它没有ConsistentRead选项(一个原因是,update 不是阅读!)。但同时,您可以使用 ConditionExpression 以原子方式更新记录。 , 像这样:

await docClient.update({
TableName: 'SomeTable',
Key: {id},
UpdateExpression: "set #status = :new_status",
ConditionExpression: '#status = :old_status',
ExpressionAttributeNames: {
"#status": "status",
},
ExpressionAttributeValues: {
":old_status": "available",
":new_status": "done",
},
}).promise()

这将确保在更新时,旧值为 available如果不是,操作将失败并抛出异常。所以,从某种意义上说,你可以说 update是强一致的。

但我的问题是关于您需要确保记录存在的场景。假设您有一个插入记录的函数。另一个更新相同的记录(鉴于其 id )。我担心的是如果到时候 update操作被执行,由于DynamoDB的最终一致性,没有匹配的记录,更新失败。如前所述, update操作不附带 ConsistentRead选项以使其高度一致。

这是一个有效的担忧吗?有什么我可以做的吗?

最佳答案

没有强一致的更新。 强一致性适用于读取 基本上,写入后立即查看的数据对于实体的所有观察者都是一致的。

当您的应用程序将数据写入 DynamoDB 表并收到 HTTP 200 响应 (OK) 时,写入已发生(在 至少一个存储位置 中)并且是持久的。数据最终在所有存储位置保持一致,通常在一秒或更短的时间内。然后您可以选择阅读 这些数据以最终或强一致性的方式。

对同一项目的并发写入应使用乐观并发处理,您可以执行 条件写入 使用 DynamoDB 事务库(在适用于 Java 的 AWS 开发工具包中提供)。

如果您需要以原子方式更新多个项目,则可以使用 DynamoDB 事务。

DynamoDB transactions provide developers atomicity, consistency, isolation, and durability (ACID) across one or more tables within a single AWS account and region. You can use transactions when building applications that require coordinated inserts, deletes, or updates to multiple items as part of a single logical business operation.

https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-transactions/



或者,您的用例可能会受益于 DynamoDB 全局表 它在并发写入之间使用“最后一个写入者获胜”的协调。

关于amazon-web-services - DynamoDB 更新是否具有强一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com