DynamoDB-异步/并行写入安全吗?

时间:2019-03-10 18:33:11

标签: java amazon-web-services amazon-dynamodb aws-sdk race-condition

在我仅执行UPDATE请求(无获取)且执行加法操作的情况下,最终结果在竞争条件下安全吗?

这里是一个例子:

id: { num: 0 }

id: { num: 1 }

id: { num: 2 }

...

id: { num: 45 }

使用添加了updateexpression属性的num说所有这些更新操作,但会以异步的方式发送到DynamoDB,而没有任何顺序的概念,它们仍然可以安全地输出到适当的系列最终值(是1035)?

如果DynamoDB在相同的确切时间收到两个更新请求,将会发生什么? DynamoDB通过原子操作一次结束一个请求时,一个请求会覆盖另一个请求,还是适当地增加?

我是否需要担心这种竞争情况的发生,或者DynamoDB是否可以很好地处理?

2 个答案:

答案 0 :(得分:2)

是的,UpdateItem操作可用于实现atomic counters。如果只加数字,则操作顺序无关紧要,没有竞争条件。

答案 1 :(得分:0)

我有一个用例,其中我要维护表中的孩子数。 例如:在父项上创建一个初始值为0的条目。在每个子项上,将计数增加1。

1:创建父级A

id |计数 A | 0

2:创建子代将id A计数增加1

id |计数 A | 1

情况1:在具有1万条记录的终端上运行脚本没有问题。 情况2:当我们在lambda(同时运行多个lambda和dong更新)中执行Ferfoem操作时。在有无原子数AtomicCount

的情况下获取比赛条件

原子计数不能确保唯一值。我移至条件更新。