
擔心一筆訂單被工廠做下去兩次?我以為加個鎖就好,結果居然是個設計問題
軟體系統為了加速作業,會開多個 process 同時處理任務。倘若兩個流程同時抓到同一張訂單、各自投產,對本公司就是莫大的損失,真實地報廢。原先我以為『加個鎖就好』結果發現是需要 idempotency key,追到 Oracle 條件式唯一索引(Unique Index),最後發現要修的除了索引外,還有一個值代表不同意義的欄位狀態。

軟體系統為了加速作業,會開多個 process 同時處理任務。倘若兩個流程同時抓到同一張訂單、各自投產,對本公司就是莫大的損失,真實地報廢。原先我以為『加個鎖就好』結果發現是需要 idempotency key,追到 Oracle 條件式唯一索引(Unique Index),最後發現要修的除了索引外,還有一個值代表不同意義的欄位狀態。