看板 Soft_Job 關於我們 聯絡資訊
不好意思,這個應該有個專有名詞,但我實在不知道 只是覺得概念很像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
atpx: 開個註記欄位紀錄已給出去,用什麼db都沒差吧 11/12 21:14
atpx: 有錢就買oracle 11/12 21:14
atpx: 沒看清楚,原來有開欄位了,你卡住的地方是? 11/12 21:40
amnesia: 如果同時有人query還沒mark起來不就會一起出去了? 11/12 21:40
fgh81113: 你可以設Synchronization的方法 11/12 21:48
jimmy689: transation <== 11/12 21:49
jimmy689: 設exclusive lock、semaphore之類的 11/12 21:52
jimmy689: rails的話record好像有現成的能用 11/12 21:53
fgh大,謝謝啦,Synchronization 對啦,我本來是要講這個 不過jimmy大也提了很多方法,像transaction跟semaphore我還有聽過 但是我忽然發現不知道怎麼把這些方法套到我的情況耶 是要把db connection這類的東西用Synchronization嗎? 不是很懂要怎麼實際應用到我的case,不知道有沒有參考範例 ^^; ※ 編輯: amnesia (220.132.75.65), 11/12/2015 21:59:23
Masakiad: 聽起來像抽獎 11/12 22:03
amnesia: 有點類似 11/12 22:04
atpx: 只是取號就查詢的時候拉高 isolation level 11/12 22:14
abccbaandy: 聽起來跟之前把票重複賣的情況好像XD 11/12 22:19
sanfann: select for update? 11/12 23:04
amnesia: 對耶,我沒想到跟賣票的應用很像耶 11/12 23:07
amnesia: select for update會把整個table lock? 11/12 23:16
amnesia: 有沒有方法是不要把整個table lock的? 11/12 23:17
amnesia: 不然我覺得要切farm做hash,免得單一table鎖太久 11/12 23:18
amnesia: select for update應該是最簡便的解法嗎? 11/12 23:34
amnesia: 大概loading到什麼情況會讓人有感到慢? 11/12 23:35
locklose: select for update 屬於row-lock,效能不會太差. 11/13 00:22
locklose: 但這東西建議寫好stored procedure 減少db組譯時間 11/13 00:23
hahahank: 程式中控制也可以吧 11/13 13:28
arenda: 用Queue處理? 11/13 23:06
Masakiad: 我也覺得queue應該有機會 11/13 23:17
amnesia: 用queue會只能處理一個request嗎?能在多說明一下嗎 11/15 18:24
Masakiad: 把所有request enqueue,然後worker批次把request deque 11/15 21:15
Masakiad: ue並進行db read write,之後才response。你可以用數個q 11/15 21:15
Masakiad: ueue來進行以上操作 11/15 21:15