• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc
V2EX  ›  程序员

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

  •  
  •   zjsxwc ·
    zjsxwc · Mar 22, 2023 · 790 views
    This topic created in 1148 days ago, the information mentioned may be changed or developed.

    场景是这样的:

    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 时,更新的库存被覆盖错了,这种情况如何避免?

    Supplement 1  ·  Mar 23, 2023
    对于被覆盖问题,我加了个 version 字段用乐观锁来保护,可能出现的覆盖修改数据问题。

    对于可能创建 2 个的问题,场景需求简化为“不允许让用户同时创建在 fieldC 为 0 时有 2 个 fieldAId fieldBId 一样的 entity ,但在 fieldC 为 1 时又允许 fieldAId fieldBId 一样。”,我解决办法是搞个冗余字段 fieldu 内容为 fieldAId 拼上 filedBId ,fieldu 加 unique 唯一锁,当 filedC 为 1 时,把 filedu 改成 null 值。
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   944 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:14 · PVG 05:14 · LAX 14:14 · JFK 17:14
    ♥ Do have faith in what you're doing.