[请益] 关于划位系统的概念

楼主: chang0206 (Eric Chang)   2014-06-26 10:08:11
公司内部福委活动有招待看电影
福委会希望我们能写一个简单的划位系统
大概的架构我已经想好
可是在处理同时划位的部分没有什么想法
当A/B同时开启订位画面,画了重复的位子,又几乎同时按下送出时
后面按下送出的 update指令会盖掉前面一位的纪录
可是两位都会看到自己划位成功
请问大概需要怎样去避免这样的情况?
作者: rickysu (Ricky)   2014-06-26 11:29:00
SQL 有个东西叫做 transaction,请自行 google 吧
作者: hSATAC (cAt Ash)   2014-06-26 11:34:00
开一个 google docs 画座位表让大家自己填
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-06-26 11:43:00
所有划位不要立刻执行 放进一个资料表queue用另一支cron在背景每秒钟从queue取出来执行 成功或失败写回queue里面 前端程式过5秒回来读取queue看划位成功没好对不起真是个烂设计 :P
作者: Kenqr (function(){})()   2014-06-26 12:07:00
在update的where条件里指定位子必须是空的
作者: crossdunk (推嘘自如)   2014-06-26 12:51:00
先抢先赢吧 @@ 用insert设位子主键或是update位子要空的
作者: vi000246 (Vi)   2014-06-26 13:09:00
送出前判断有空位才给update
作者: alog (A肉哥)   2014-06-26 13:29:00
transaction or table lock; row lock基本上lock table就够用了不要弄到dead lock即可
作者: fowei (小维)   2014-06-26 16:36:00
嗯. 建议用transation
楼主: chang0206 (Eric Chang)   2014-06-26 17:40:00
我也是朝transaction的方向在STUDY 现在的设计在update时,已经会去检查一个flag,但是还是会发生强碰的情况但是现在碰到的状况是A/B两人按下送出,都会满足条件接着进行后续的update 就算把update这边改用transcation那是不是说还要在transaction中去检查?要检查啥判断强碰了? 这些都还在想看要怎么弄 ..
作者: alog (A肉哥)   2014-06-28 00:35:00
不可能强碰 除非你写错你可以用两个以上的 mysql client 测试不同的 connection 应该是错开的不然你用 LOCK TABLE 来处理
楼主: chang0206 (Eric Chang)   2014-06-29 20:55:00
那可以建议一下应该怎么检查吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com