扣减库存策略采用订单是否锁定库存方案

在订单系统中,为了应对高并发环境下的库存扣减问题,提出了一个新策略:先将订单插入,然后获取商品原始库存和已锁定库存,对比新订单数量,若允许锁定则更新订单状态。通过更新每个订单记录的状态而非直接修改库存字段,避免了资源竞争,提高了系统性能。此策略要求所有订单数据集中存储,并可在系统不忙时进行数据迁移。
摘要由CSDN通过智能技术生成

扣减库存策略采用订单是否锁定库存方案

 

    在订单系统中用户下订单流程中,有一个重要环节是“扣减库存”;而此“扣减库存”采用的策略是直接在一个商品库存字段中的库存数据减去订单商品数量;如:

update productStock set
quantity =  quantity -1
where productId = 20034 and quantity >=1

此策略在高并发环境下会产生严重的性能问题。 

    所以本人就想换一种不争用同一行同一个字段的资源来避免竟争,以解决高并发带来的性能问题。本人的思路是,先将用户提交的订单插入订单表,然后获取此商的品原始投入的库存数,再取此产品已经被锁定库存的商品数量,将两者的数据与新下订单的商品数量比较,如果还可以再将此新订单锁定库存则更新这个订单的状态以表示此订单已经成功锁定库存。

sql 如下:

 

update  [orderInfo] 

 set  [IsEnabled] = 1

 from  [orderInfo] a

 where a.orderid = 64434398158878 and  a.Productid = 324285 and [IsEnabled] = 0 and a.ProductQTY <=(

  select sum(QTY) from (

select   StockQTY   as QTY from [productStock] where Productid = 324285

  union

    select    -sum( Pr

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值