V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

这种情况高并发时应该如何处理?

  •  
  •   zjsxwc ·
    zjsxwc · 2023-03-22 20:33:46 +08:00 · 412 次点击
    这是一个创建于 414 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景是这样的:

    1. 产品 K 是由 物料 A 与 物料 B ,

    2. 不同工厂 加工 物料 A 与 物料 B 都能得到 产品 K ,只要是物料 A 的 id 与 物料 B 的 id 一样就认为是同一个产品,产品 k 可能会有各种不同的名称。

    3. 仓库收到 某工厂某天某个批次 产品 K 就创建或更新 商品 K:没有商品 K 就创建,已经有商品 K 就更新库存。

    商品 K ,也只认物料 a 与物料 b 来确定。

    现在问题是如果第 3 步是高并发时,会不会出现 2 个 商品 K ,会不会在 之前只有 1 个商品 K 时,更新的库存被覆盖错了,这种情况如何避免?

    第 1 条附言  ·  2023-03-23 09:06:47 +08:00
    对于被覆盖问题,我加了个 version 字段用乐观锁来保护,可能出现的覆盖修改数据问题。

    对于可能创建 2 个的问题,场景需求简化为“不允许让用户同时创建在 fieldC 为 0 时有 2 个 fieldAId fieldBId 一样的 entity ,但在 fieldC 为 1 时又允许 fieldAId fieldBId 一样。”,我解决办法是搞个冗余字段 fieldu 内容为 fieldAId 拼上 filedBId ,fieldu 加 unique 唯一锁,当 filedC 为 1 时,把 filedu 改成 null 值。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4344 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:00 · PVG 09:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.