在我仅执行UPDATE请求(无获取)且执行加法操作的情况下,最终结果在竞争条件下安全吗?
这里是一个例子:
id: { num: 0 }
id: { num: 1 }
id: { num: 2 }
...
id: { num: 45 }
使用添加了updateexpression
属性的num
说所有这些更新操作,但会以异步的方式发送到DynamoDB,而没有任何顺序的概念,它们仍然可以安全地输出到适当的系列最终值(是1035)?
如果DynamoDB在相同的确切时间收到两个更新请求,将会发生什么? DynamoDB通过原子操作一次结束一个请求时,一个请求会覆盖另一个请求,还是适当地增加?
我是否需要担心这种竞争情况的发生,或者DynamoDB是否可以很好地处理?
答案 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
的情况下获取比赛条件原子计数不能确保唯一值。我移至条件更新。