作者chang0206 (Eric Chang)
看板PHP
標題[請益] 關於劃位系統的概念
時間Thu Jun 26 10:08:11 2014
公司內部福委活動有招待看電影
福委會希望我們能寫一個簡單的劃位系統
大概的架構我已經想好
可是在處理同時劃位的部分沒有什麼想法
當A/B同時開啟訂位畫面,畫了重複的位子,又幾乎同時按下送出時
後面按下送出的 update指令會蓋掉前面一位的紀錄
可是兩位都會看到自己劃位成功
請問大概需要怎樣去避免這樣的情況?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.177.1
※ 文章網址: http://webptt.com/m.aspx?n=bbs/PHP/M.1403748494.A.211.html
1F:推 rickysu:SQL 有個東西叫做 transaction,請自行 google 吧 06/26 11:29
2F:→ hSATAC:開一個 google docs 畫座位表讓大家自己填 06/26 11:34
3F:→ MOONRAKER:所有劃位不要立刻執行 放進一個資料表queue 06/26 11:43
4F:→ MOONRAKER:用另一支cron在背景每秒鐘從queue取出來執行 成功或失敗 06/26 11:43
5F:→ MOONRAKER:寫回queue裡面 前端程式過5秒回來讀取queue看劃位成功沒 06/26 11:44
6F:→ MOONRAKER:好對不起真是個爛設計 :P 06/26 11:44
7F:推 Kenqr:在update的where條件裡指定位子必須是空的 06/26 12:07
8F:推 crossdunk:先搶先贏吧 @@ 用insert設位子主鍵或是update位子要空的 06/26 12:51
9F:推 vi000246:送出前判斷有空位才給update 06/26 13:09
10F:推 alog:transaction or table lock; row lock 06/26 13:29
11F:→ alog:基本上lock table就夠用了 06/26 13:30
12F:→ alog:不要弄到dead lock即可 06/26 13:31
13F:推 fowei:嗯. 建議用transation 06/26 16:36
14F:→ chang0206:我也是朝transaction的方向在STUDY 現在的設計在update 06/26 17:40
15F:→ chang0206:時,已經會去檢查一個flag,但是還是會發生強碰的情況 06/26 17:41
16F:→ chang0206:但是現在碰到的狀況是A/B兩人按下送出,都會滿足條件 06/26 17:43
17F:→ chang0206:接著進行後續的update 就算把update這邊改用transcation 06/26 17:43
18F:→ chang0206:那是不是說還要在transaction中去檢查?要檢查啥判斷 06/26 17:44
19F:→ chang0206:強碰了? 這些都還在想看要怎麼弄 .. 06/26 17:44
20F:→ alog:不可能強碰 除非你寫錯 06/28 00:35
21F:→ alog:你可以用兩個以上的 mysql client 測試 06/28 00:37
22F:→ alog:不同的 connection 應該是錯開的 06/28 00:38
23F:→ alog:不然你用 LOCK TABLE 來處理 06/28 00:39
24F:→ chang0206:那可以建議一下應該怎麼檢查嗎? 06/29 20:55