限制信贷/借记交易

时间:2020-03-31 13:23:40

标签: mysql concurrency transactions locking mutex

我必须为公司中的所有用户开发钱包。我在mysql中有一个wallets表,其中有以下列:wallet_id(int auto_increment主键),user_id(int),balance(int)

我也有单独的订单表,其中包含以下列:id,wallet_id,类型(贷方/借方),金额,add_on(时间戳)。

我的用例是,我每个月只能在一个钱包中允许最大贷记和借记10,000。我可以select sum(amount) from orders where month(added_on) = current_month and wallet_id = xyz,仅一位用户即可轻松实施此检查。如果该总和加上我的输入总和(由客户要求加钱输入)少于10,000,那么我继续进行。

但是,如果同时存在请求,我应该如何处理?问题可能是如果wallet_id说xyz已经增加了7,000卢比。这个月。现在我同时收到两个请求以增加2,000卢比。我只希望其中一个成功。我正在考虑以下选项:

  1. wallet_id上的全局分布式锁(mutex),以便一次只处理一个请求。
  2. DB(mysql)级别通过将以上查询实现为SELECT for UPDATE来锁定。在这种情况下,第二个类似的选择查询将被阻止。

还有没有其他更有效的方法可以解决此问题?如果不是,请选择两者之一 以上可能更好?

0 个答案:

没有答案
相关问题