[請益] 關於劃位系統的概念

看板PHP作者 (Eric Chang)時間11年前 (2014/06/26 10:08), 編輯推噓6(6018)
留言24則, 9人參與, 最新討論串1/4 (看更多)
公司內部福委活動有招待看電影 福委會希望我們能寫一個簡單的劃位系統 大概的架構我已經想好 可是在處理同時劃位的部分沒有什麼想法 當A/B同時開啟訂位畫面,畫了重複的位子,又幾乎同時按下送出時 後面按下送出的 update指令會蓋掉前面一位的紀錄 可是兩位都會看到自己劃位成功 請問大概需要怎樣去避免這樣的情況? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.177.1 ※ 文章網址: http://www.ptt.cc/bbs/PHP/M.1403748494.A.211.html

06/26 11:29, , 1F
SQL 有個東西叫做 transaction,請自行 google 吧
06/26 11:29, 1F

06/26 11:34, , 2F
開一個 google docs 畫座位表讓大家自己填
06/26 11:34, 2F

06/26 11:43, , 3F
所有劃位不要立刻執行 放進一個資料表queue
06/26 11:43, 3F

06/26 11:43, , 4F
用另一支cron在背景每秒鐘從queue取出來執行 成功或失敗
06/26 11:43, 4F

06/26 11:44, , 5F
寫回queue裡面 前端程式過5秒回來讀取queue看劃位成功沒
06/26 11:44, 5F

06/26 11:44, , 6F
好對不起真是個爛設計 :P
06/26 11:44, 6F

06/26 12:07, , 7F
在update的where條件裡指定位子必須是空的
06/26 12:07, 7F

06/26 12:51, , 8F
先搶先贏吧 @@ 用insert設位子主鍵或是update位子要空的
06/26 12:51, 8F

06/26 13:09, , 9F
送出前判斷有空位才給update
06/26 13:09, 9F

06/26 13:29, , 10F
transaction or table lock; row lock
06/26 13:29, 10F

06/26 13:30, , 11F
基本上lock table就夠用了
06/26 13:30, 11F

06/26 13:31, , 12F
不要弄到dead lock即可
06/26 13:31, 12F

06/26 16:36, , 13F
嗯. 建議用transation
06/26 16:36, 13F

06/26 17:40, , 14F
我也是朝transaction的方向在STUDY 現在的設計在update
06/26 17:40, 14F

06/26 17:41, , 15F
時,已經會去檢查一個flag,但是還是會發生強碰的情況
06/26 17:41, 15F

06/26 17:43, , 16F
但是現在碰到的狀況是A/B兩人按下送出,都會滿足條件
06/26 17:43, 16F

06/26 17:43, , 17F
接著進行後續的update 就算把update這邊改用transcation
06/26 17:43, 17F

06/26 17:44, , 18F
那是不是說還要在transaction中去檢查?要檢查啥判斷
06/26 17:44, 18F

06/26 17:44, , 19F
強碰了? 這些都還在想看要怎麼弄 ..
06/26 17:44, 19F

06/28 00:35, , 20F
不可能強碰 除非你寫錯
06/28 00:35, 20F

06/28 00:37, , 21F
你可以用兩個以上的 mysql client 測試
06/28 00:37, 21F

06/28 00:38, , 22F
不同的 connection 應該是錯開的
06/28 00:38, 22F

06/28 00:39, , 23F
不然你用 LOCK TABLE 來處理
06/28 00:39, 23F

06/29 20:55, , 24F
那可以建議一下應該怎麼檢查嗎?
06/29 20:55, 24F
文章代碼(AID): #1Jgu2E8H (PHP)
文章代碼(AID): #1Jgu2E8H (PHP)