DynamoDB并发写入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DynamoDB并发写入相关的知识,希望对你有一定的参考价值。

我有一个现有的DynamoDB表,它有属性说

---------------------------------------------------------
hk(hash-key)| rk(range-key)|   a1    |    a2   |    a3   | 
---------------------------------------------------------

我有一个现有的DynamoDb客户端,它只会更新a1的现有记录。我想创建第二个编写器(DDB客户端),它也将更新现有记录,但仅限于a2和a3。 如果ddb客户端同时尝试更新同一记录(a1为1,a2和a3为1),DynamoDb是否会保证所有a1 a2 a3都更新为正确的值(所有三个新值)?使用保存行为UPDATE_SKIP_NULL_ATTRIBUTES是否足以达到此目的,还是需要实现某种乐观锁定?如果没有,DDB是否有为此目的提供的东西?

答案

如果您碰巧使用Dynamo Java SDK,那么您很幸运,因为SDK仅支持使用Optimistic Locking。我不确定其他SDK是否支持类似的东西 - 我怀疑他们没有。

乐观锁定是一种策略,用于确保您正在更新(或删除)的客户端项目与DynamoDB中的项目相同。如果使用此策略,则会保护您的数据库写入不被其他人的写入覆盖 - 反之亦然。

另一答案

对DynamoDB的读取最终是一致的。看到这个:qazxsw poi

DynamoDB最终支持一致且强一致的读取。

最终一致的阅读

从DynamoDB表读取数据时,响应可能不会反映最近完成的写入操作的结果。响应可能包括一些陈旧的数据。如果您在短时间后重复读取请求,则响应应返回最新数据。

非常一致的读取

当您请求强一致性读取时,DynamoDB会返回包含最新数据的响应,反映所有先前写入操作成功的更新。如果存在网络延迟或中断,则可能无法使用强一致性读取。

注意除非另行指定,否则DynamoDB最终使用一致读取。读取操作(如GetItem,Query和Scan)提供ConsistentRead参数。如果将此参数设置为true,则DynamoDB在操作期间使用强一致性读取。

基本上,您已指定在阅读时需要具有强一致性数据。

那应该可以解决你的问题。使用一致的读取,您应该看到所有三个字段的更新。

请注意,对于强一致性读取存在定价影响。

以上是关于DynamoDB并发写入的主要内容,如果未能解决你的问题,请参考以下文章

如何将大型 Pyspark DataFrame 写入 DynamoDB

将 spark 数据帧行写入 dynamoDB 表中的项目

DynamoDB 写入太慢

DynamoDB 有条件写入

DynamoDB 中的批量写入操作是不是使用多线程策略?

AWS:从 Pandas 数据帧写入 DynamoDB