0

我有一个名为“事务”的表和另一个名为“用户”的表

当用户向服务器请求时,我从交易中获取他的最后一笔交易余额,并根据他的请求增加或减少余额,

一切正常,

但问题是,当他尝试在不考虑异步请求之类的响应的情况下在一秒钟内请求 10 次或更多次时,发送请求的速度超过了从数据库获取余额的速度,所以我在计算新余额时遇到了问题。

像这样的东西:

A部分:余额:100,金额0,新余额:100

B部分:余额(从A部分获得):100,金额:-10,新余额:90

Section C: balance(从上一节得到):100(因为section b还没完成所以设置余额为90), amount:-10, new balance: 90

当这种情况发生在毫秒时,C 部分的余额是 A 部分的余额,而不是 B 部分的余额!因为B部分还没有完成调用数据库设置余额,90,所以这是问题

一个更好的例子:

例子

我知道一些解决此问题的解决方案,但我想以其他方式解决此问题。

我找到的解决方案:

1-在 B 部分开始时为当前用户锁定数据库并在其末尾解锁它,并且在数据库(或用户)被锁定之前不要让 C 部分开始!

2-限制每个用户的请求,不要让用户在一分钟内发送 10 个请求或类似的东西

由于我不想限制用户发送请求的原因。解决方案 1 降低了响应用户的性能。

你推荐什么算法?

谢谢。

4

0 回答 0