[討論] 資料需要鎖定並應付多個請求的作法

作者: aoksc (重出江湖)   2016-09-30 00:18:08
請問各位
今天interview的時候有跟主管聊到以前的一個問題
就是某個流水號需要一次只能被一個請求讀取
並且使用完要把最新的流水號更新回去
所以必須要用交易鎖定
但主管有提到如果是大量的請求要讀取要怎麼做比較好呢?
這問題之前有跟朋友討論過
結論是用queue
反正就排隊一個一個來
但主管說叫我回去想想是否還有更好的作法
因為我也沒遇過比較極端的情況
所以像這種需要頻繁鎖定資料表避免讀取的話要怎麼做才能效能太差的問題呢?
或是有哪些關鍵字可以尋找呢?
謝謝
作者: flowwinds (..)   2016-09-30 15:28:00
看不大懂..而雖然小弟不一定能回答 但建議可舉個例
作者: iamnotfat (我不肥)   2016-09-30 16:58:00
資料庫是用哪家的呢?
作者: longlongint (華哥爾)   2016-10-01 01:42:00
丟到雲端上面跑吧 不過同步的問題還是無解通常會避免大家同時寫入/讀取同一個地方只要有"寫入" 就一定要排隊其實通常會有工具可以套 只是沒用過不知道OTZ
作者: magus (Magus)   2016-10-06 01:44:00
'流水號增加到150的時候要update回原來欄位'<=這段看不懂我的想法是用程式判斷...
作者: AminLA (101)   2016-10-07 21:23:00
可以在update 時指定當初取得的序號例如 set seq=150 where seq=1 取得受影響的筆數就知道有沒有成功,沒成功的話就再次取得最新的序號 ,算出差值,下個update 幫原本已經寫入的149 筆更新成新的序號,再下個update 更新當前的seq 反複這個過程直到成功 簡單說就是 CAS
作者: iFEELing (ing)   2016-10-08 12:49:00
如果允許中間有空號就用SEQUENCE 沒做完的就放棄如果一定要連號 本質上就是那個號碼會被排斥性保護大概就是看能不能拆成分區段的幾個小鎖來分散....重點在你的需求是"不重覆"還是"一定要連號"不重覆的話好辦 一定要連號就比較麻煩

Links booklink

Contact Us: admin [ a t ] ucptt.com