作者chang0206 (Eric Chang)
看板PHP
标题[请益] 关於划位系统的概念
时间Thu Jun 26 10:08:11 2014
公司内部福委活动有招待看电影
福委会希望我们能写一个简单的划位系统
大概的架构我已经想好
可是在处理同时划位的部分没有什麽想法
当A/B同时开启订位画面,画了重复的位子,又几乎同时按下送出时
後面按下送出的 update指令会盖掉前面一位的纪录
可是两位都会看到自己划位成功
请问大概需要怎样去避免这样的情况?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.251.177.1
※ 文章网址: http://webptt.com/cn.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