我希望对我的dyneDB表使用一个简单的递增和递减。
更新看起来像:
aws dynamodb update-item
--table-name table_name
--key 'le key'
--update-expression "ADD #C :delta"
--expression-attribute-names '{"#C": "count"}'
--expression-attribute-values '{":delta":{"N":"1"}}'
--return-values UPDATED_NEW
对于增量delta
将为1,对于减量则为-1。
在并发工作负载和竞争条件的可能性中,如果我们同时进行多个增量和减量,那么这样的更新会有多一致?
我希望这将是非常一致的,考虑到我们是NOT"获取和设置";值,但直接传递要添加的delta
。这就是我将其作为一个单独的问题添加的原因,我不认为它是人们经常建议有条件更新的问题的重复。
对单个项的写访问是序列化的,所以即使在重负载下也不必担心这一点。
需要考虑(担心)的是,当你的呼叫产生网络超时错误时,你不知道突变是否发生。你应该重新打电话吗?你不会知道的。
因此,通常更花哨的技术是处理这种情况,并以某种方式使调用幂等。
默认情况下,DynamoDB最终是一致的。最终一致性可能并不总是反映最新写入的结果。然而,根据AWS的文档,所有数据副本的一致性通常在一秒钟内达到。
如果您的应用程序无法容忍最终的一致性,您可以选择强一致性。DynamoDB中的强一致性读取返回一个结果,该结果反映在读取之前收到成功响应的所有写入。您可以通过向DynamoDB中的请求发送一个可选参数来实现这一点。
关于这个主题与DynamoDB相关的更彻底的处理,请查看有关读取一致性的AWS文档。