背景:一个定时任务(多实例),取表 A 中状态为“初始化”的记录,然后取表 B 中对应记录,B 库存-A 消费存在两种情况。若 B-A=0,AB 记录都职位“完成”状态;若 B-A>0,AB 记录都职位“完成”状态后,再生成一条新的 B 记录,库存字段值=B-A ;
正常情况一:AB 各一条记录,库存与消费相等,AB 完成; 正常情况二:AB 各一条记录,库存大于消费,AB 完成,新生成一条库存记录 B ; 正常情况三:库存 B 一条记录,值为 8,消费 A1 、A2 两条记录,值都为 4 。首先 A1 与 B 进行操作,8-4=4>0,A1 和 B 完成,然后生成一条新 B,值为 4,然后 A2 和新 B 操作后全部完成。
异常情况:根据正常情况三,A1 与 A2 先后执行没问题,但是因为是多实例,A1 和 A2 可能同时执行,同时查询到 B 那一条记录,然后俩都 8-4=4>0,最后生成俩新 B 记录
理想结果:B 那条记录能不能加个锁或其它手段控制一下(表数据量大,肯定不能锁整个表),让 A1 和 A2 先后顺序执行,避免同时执行
注:业务比较复杂,并非只是库存-消费者一个小逻辑,此处简化问题了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.