【发布时间】:2013-11-22 12:33:53
【问题描述】:
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。
如何预防?
【问题讨论】:
-
看起来是个不错的解决方案。我想知道使用单独的锁集合与 Update If Current 模式相比如何?
-
如果当前更新将仅适用于同一个文档,而不适用于多个文档
-
更新如果当前只是旨在确保您更新最新的文档,它不是跨许多文档的事务,例如您正在寻找的文档
标签: mongodb transactions locking