[閒聊] DB大師請進

作者: SuicideComet (|)   2022-08-15 12:49:46
我的主管給了我一個很神祕的需求:
我們的程式有一個update的函數
可以走 JPA Repository
也可以直接下 SQL
這個update的函數要抓出某種資料 條件是其中一個欄位 fg == 0
則做的事情就是把 fg = 1
UPDATE data SET fg = 1 WHERE fg = 0 類似這種感覺
現在問題來了
因為同時有可能有多個thread呼叫這個函數
假設資料庫裡有一筆 fg 為 0 的資料
A, B 兩個一起呼叫
則可能
A 要回傳 成功更新 1 筆
B 要回傳 成功更新 0 筆
或是AB逆轉也可,
就是應該只有一個人找到 fg = 1 並更新成功
我的主管要求如下:
1. 不可以 lock 資料 (因為據說 lock 會影響效能)
2. 函數執行不先去查資料, 而是直接跑 UPDATE
我可以怎麼做?
1000p懸賞
作者: pomelotea (玖二共侍 一花臭表)   2022-08-15 13:06:00
用semaphore 限制存取?
作者: SuicideComet (|)   2022-08-15 13:10:00
semaphore 會有deadlock問題吧?哀 我看來看去還是optimistic lock 比較理想

Links booklink

Contact Us: admin [ a t ] ucptt.com