使用ADD更新时,DynamoDB原子计数器在比赛条件下的一致性如何



我希望对我的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允许您根据应用程序的需要选择一致性模型。

默认情况下,DynamoDB最终是一致的。最终一致性可能并不总是反映最新写入的结果。然而,根据AWS的文档,所有数据副本的一致性通常在一秒钟内达到。

如果您的应用程序无法容忍最终的一致性,您可以选择一致性。DynamoDB中的强一致性读取返回一个结果,该结果反映在读取之前收到成功响应的所有写入。您可以通过向DynamoDB中的请求发送一个可选参数来实现这一点。

关于这个主题与DynamoDB相关的更彻底的处理,请查看有关读取一致性的AWS文档。

相关内容

  • 没有找到相关文章

最新更新