[闲聊] 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