暂无图片
高并发下,类似于库存递减的处理方法?大家如果解决的
我来答
分享
sunflower
2023-04-22
高并发下,类似于库存递减的处理方法?大家如果解决的
支付系统交易场景,代付业务,比如商户单日限额500个W,每一笔付款都需要对商户限额表做金额递减,高并发场景下出现了实际付款的金额大于商户限额金额,出现多付的情况,想问大家,如何在数据库层面解决这种多付的情况?
我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
豆宇斯

和一位后端同学聊了下,他说了一句“高并发指望数据库,只能GG” 哈哈哈哈

感觉除了触发器、存储过程、修改事务隔离级别,其他的好像也只能在应用端做限制吧

暂无图片 评论
暂无图片 有用 0
暂无图片
Zixin Huo

尝试在数据库层面进行限制和检查,可以尝试以下方法:

  1. 数据库触发器:可以在每次插入或更新付款记录时,检查商户的限额是否足够支付当前付款金额。如果商户限额不足,则触发器可以抛出异常或者拒绝插入/更新操作。触发器可以在数据库层面保证限额不足时不会出现多付的情况。
  2. 数据库事务:可以使用数据库事务来保证在付款记录插入或更新之前,检查商户限额是否足够支付当前付款金额。如果限额不足,则回滚事务,从而保证不会出现多付的情况。请注意,使用事务可能会对数据库性能产生影响,因为它会阻塞其他并发操作。
  3. 库存锁:可以在商户限额表上使用库存锁,以确保在同一时间只有一个付款事务能够更新商户的限额。库存锁可以防止并发付款事务同时减少商户限额,并保证不会出现多付的情况。请注意,使用库存锁可能会降低数据库的并发性能,因为它会阻塞其他并发操作。
暂无图片 评论
暂无图片 有用 1
Thomas

楼主,我对你说的库存锁很感兴趣,能否举个例子呢?谢谢

暂无图片 评论
暂无图片 有用 0
sunflower
触发器不行的,现在用的是延迟更新的方式,但是还是不够理想!!!!
暂无图片 评论
暂无图片 有用 0
豆宇斯

在应用端做控制是最方便的吧,为啥要把这个任务丢给数据库,加个版本控制呗

参考

https://www.dandelioncloud.cn/article/details/1548899632506191873

暂无图片 评论
暂无图片 有用 1
Thomas

楼上关于乐观锁和悲观锁的文章,相当棒,把问题说得很通晓。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏