[請益] 類似critical section的DB query

看板Soft_Job作者 (記不住)時間10年前 (2015/11/12 21:12), 10年前編輯推噓9(9019)
留言28則, 10人參與, 最新討論串1/1
不好意思,這個應該有個專有名詞,但我實在不知道 只是覺得概念很像critial section @@ 假設我DB裏面長得像這樣 id | price | name | dirty 01 100 abc123 N 02 100 def999 N 03 100 xxx877 N ...... 100 那我設計一個API,要提供price=100裏面的任何1個id給user 在這個例子,假設這100個裏面有50個price是100好了 那就是從這50個裏面挑一個給user 重點是如同時有20個人要的話 我不能把同樣的id給不同的人 當我把id給出去後,我需要把這個record設成dirty 想請問這個要怎麼做比較好? 目前DB跟language都還沒決定 看用什麼來做比較適合就用哪個 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.75.65 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1447333953.A.22C.html

11/12 21:14, , 1F
開個註記欄位紀錄已給出去,用什麼db都沒差吧
11/12 21:14, 1F

11/12 21:14, , 2F
有錢就買oracle
11/12 21:14, 2F

11/12 21:40, , 3F
沒看清楚,原來有開欄位了,你卡住的地方是?
11/12 21:40, 3F

11/12 21:40, , 4F
如果同時有人query還沒mark起來不就會一起出去了?
11/12 21:40, 4F

11/12 21:48, , 5F
你可以設Synchronization的方法
11/12 21:48, 5F

11/12 21:49, , 6F
transation <==
11/12 21:49, 6F

11/12 21:52, , 7F
設exclusive lock、semaphore之類的
11/12 21:52, 7F

11/12 21:53, , 8F
rails的話record好像有現成的能用
11/12 21:53, 8F
fgh大,謝謝啦,Synchronization 對啦,我本來是要講這個 不過jimmy大也提了很多方法,像transaction跟semaphore我還有聽過 但是我忽然發現不知道怎麼把這些方法套到我的情況耶 是要把db connection這類的東西用Synchronization嗎? 不是很懂要怎麼實際應用到我的case,不知道有沒有參考範例 ^^; ※ 編輯: amnesia (220.132.75.65), 11/12/2015 21:59:23

11/12 22:03, , 9F
聽起來像抽獎
11/12 22:03, 9F

11/12 22:04, , 10F
有點類似
11/12 22:04, 10F

11/12 22:14, , 11F
只是取號就查詢的時候拉高 isolation level
11/12 22:14, 11F

11/12 22:19, , 12F
聽起來跟之前把票重複賣的情況好像XD
11/12 22:19, 12F

11/12 23:04, , 13F
select for update?
11/12 23:04, 13F

11/12 23:07, , 14F
對耶,我沒想到跟賣票的應用很像耶
11/12 23:07, 14F

11/12 23:16, , 15F
select for update會把整個table lock?
11/12 23:16, 15F

11/12 23:17, , 16F
有沒有方法是不要把整個table lock的?
11/12 23:17, 16F

11/12 23:18, , 17F
不然我覺得要切farm做hash,免得單一table鎖太久
11/12 23:18, 17F

11/12 23:34, , 18F
select for update應該是最簡便的解法嗎?
11/12 23:34, 18F

11/12 23:35, , 19F
大概loading到什麼情況會讓人有感到慢?
11/12 23:35, 19F

11/13 00:22, , 20F
select for update 屬於row-lock,效能不會太差.
11/13 00:22, 20F

11/13 00:23, , 21F
但這東西建議寫好stored procedure 減少db組譯時間
11/13 00:23, 21F

11/13 13:28, , 22F
程式中控制也可以吧
11/13 13:28, 22F

11/13 23:06, , 23F
用Queue處理?
11/13 23:06, 23F

11/13 23:17, , 24F
我也覺得queue應該有機會
11/13 23:17, 24F

11/15 18:24, , 25F
用queue會只能處理一個request嗎?能在多說明一下嗎
11/15 18:24, 25F

11/15 21:15, , 26F
把所有request enqueue,然後worker批次把request deque
11/15 21:15, 26F

11/15 21:15, , 27F
ue並進行db read write,之後才response。你可以用數個q
11/15 21:15, 27F

11/15 21:15, , 28F
ueue來進行以上操作
11/15 21:15, 28F
文章代碼(AID): #1MH9118i (Soft_Job)