DynamoDB帐户余额原子计数器

Fro*_*iwi 5 amazon-dynamodb

在DynamoDB中,“原子计数器”是一个避免出现竞争状况的数字

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.AtomicCounters

是什么使数字具有原子性,我可以在非单位值的浮点数中加/减吗?

目前,我正在执行“设置余额=余额+:更改”

(长版)我正在尝试使用DynamoDB来实现用户余额,因此准确性至关重要。可以同时从多个来源更新余额。无需预取余额,我们永远不会拒绝交易,我只是在乎,当所有操作完成后,我们将获得正确的余额。只要最终结果正确,也可以按任何顺序应用操作。

据我了解,这应该没问题,但是我还没有看到任何原子增量示例会改变“ 1”以外的值

我之所以感到犹豫,是因为诸如Amazon DynamoDB条件写入和原子计数器之类的问题建议针对类似情况使用条件写入,这听起来像一个可怕的主意。如果我获取余额,更改并执行条件写入,那么如果同时更改了值,则写入可能会失败。但是,平衡是业务关键的定义,在忽略文档时我总是很紧张

-附加信息-

所有写操作都将来自Lambda函数,我希望写操作的成功率几乎达到100%。但是,我还保留所有更改的历史记录,并且如果余额处于“未知”状态(例如,网络超时),则可以锁定表并根据历史记录重新计算正确的余额。

我认为这是最好的“正常”操作。在99.999%的时间内,所有更新都可以一次写入。失败的代价可能是非常高昂的,因为我们需要扫描客户的整个历史以重新建立平衡,但是就权衡而言,这似乎是一个非常安全的选择。

Fro*_*iwi 3

从AWS工作人员的回复来看,这个想法似乎是可行的

应用程序编写者通常会结合使用这两种方法,其中您可以使用原子计数器进行实时计数,并使用审计表进行稍后的完美记账。

https://forums.aws.amazon.com/thread.jspa?messageID=470243ⳣ

还确认更新将是原子的并且任何更新操作都将是一致的

您发送到 DynamoDB 的所有非批量请求都会以原子方式进行处理 - 请求之间不涉及任何类型的交错。写入请求也是一致的,因此任何写入请求都将在收到请求时更新该项目的最新版本。

https://forums.aws.amazon.com/thread.jspa?messageID=621994綪

事实上,对给定项目的每次写入都是强一致的

在 DynamoDB 中,针对给定项目的所有操作都是序列化的。

https://forums.aws.amazon.com/thread.jspa?messageID=324353