[請益] 資料庫同步的問題

看板 Soft_Job
作者 lancer7 (158)
時間 2011-10-04 15:41:56
留言 19則留言 (6推 0噓 13→)

假設一個訂票系統有一個table:座位 欄位有日期、座位號碼、是否available、訂位人的ID 現在有兩個user: A, B進入了訂票系統 接著發生了以下事件 1. A select此table發現有五個空位 2. B select此table發現有五個空位 3. A 訂了四個位子,並且把這四個位子的狀態update為unavailable 4. A結束transaction 5. 現在B以為有五個空位,於是訂了兩個位子 => 發生重複訂位的問題 請問一下,有什麼辦法解決這個同步的問題? 我想到的方法是在事件1發生時讓A對table作lock,然後B要等到A結束transaction才能select 不過這方法效率似乎不好,有更好的方法嗎? -- ◆ From: 114.42.9.22
※ 批踢踢實業坊(ptt.cc)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1317714119.A.F1A.html

a1234shin:B在訂位Update時再檢查一次狀態.... 10/04 15:44

lancer7:問題是在select和update之間還是有可能發生狀態被更改 10/04 15:50

lancer7:maybe有一個user C在你recheck和update之間有作訂位 10/04 15:52

LeafE: 做交易行為 ?? 不過請小心死鍊 !! 10/04 16:01

danielguo:row-level locking? 10/04 16:05

mervynW:UPDAET WHERE 這邊要check啊 10/04 16:12

miisoo4u:先把ORDER都寫到一個TABLE~再寫支排隊程式依序處理 10/04 16:15

miisoo4u:還要再寫支程式監控排隊程式是不是還活著 10/04 16:17

hanbz:參考os書裡面的synchronization那個章節XD 10/04 16:36

phantom400:不想在DB層做lock控管的話 10/04 16:40

phantom400:1.不要使用transation了 Update操作請用單筆操作 10/04 16:41

phantom400:2.Where條件加上是否available 10/04 16:41

atpx:不在transaction處理的話, 在定位成功前檢查一次也是個方法 10/04 21:07

atpx:但是這樣就變成畫面上看有位置點下去沒位置 10/04 21:07

genesic:畫面顯示跟訂下去本來就會不一樣 10/05 14:20

genesic:不然假如畫面一直停在那邊,整個系統就得hold住等你訂完 10/05 14:21

chiaho:insert 訂位資料(包含userID) in temp table 10/08 20:05

chiaho:然後select from temp table top 1, 檢查userId是A還是B 10/08 20:06

chiaho:完整一點的話是 insert 資料+目前時間, select 五分鐘內 10/08 20:10

您可能感興趣