gpt4 book ai didi

mongodb - 如何使用 MongoDB 转移资金?

转载 作者:可可西里 更新时间:2023-11-01 09:36:45 25 4
gpt4 key购买 nike

Account has embedded
Transactions
amount (positive for received transactions, negative for outgoing transactions)

用户想要汇款。我们需要计算账户余额以检查是否有足够的钱。在伪代码中:

send_money(amount)
balance = sum(account's all transactions) // Mongo Query 1
if (amount <= balance)
add a new transaction to account // Mongo Query 2

但是两个并发的 mongo 连接都通过查询 1 并继续进行查询 2 是不可能的吗?假设用户的余额为 1,并且两个并发的值为 1 的汇款请求同时通过查询 1 并成功添加到交易中。实际上,用户最终的余额为 -1。

这是如何预防的?

最佳答案

当您的用例需要跨越多个文档的事务时,MongoDB 通常不适合它,因为当多个文档受到影响时它不支持原子操作。

一个可能的解决方法是 two-phase-commit模型。

这基本上意味着您首先要为每个文档添加一个描述,作为它的附加字段。然后,您对每个应用该操作并删除描述的文档执行原子操作。这些步骤中的每一步都通过随后查询文档来确认,并且交易的每个步骤都由第三个文档记录在待处理交易的附加集合中。这使您可以检查未决事务并将其回滚。

该方法实现难度大,开销大。在你实现这个之前,你真的应该考虑是否真的有充分的理由不使用具有 native 事务支持的数据库系统。

关于mongodb - 如何使用 MongoDB 转移资金?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20145043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com