排程實戰筆記手繪封面:同一筆訂單差點被做兩次,左邊『只加鎖,不夠』的 race condition,右邊『正確性要靠 DB 約束』的唯一索引,以及條件式唯一索引與狀態機設計重點。

擔心一筆訂單被工廠做下去兩次?我以為加個鎖就好,結果居然是個設計問題

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

June 2, 2026 · 4 分鐘 · 雅青