我正在使用mysql,php。 表 user_meetup id,user_id,meetup_id with unique on(user_id,meetup_id) 如果我的聚会受到地方(10个地方)的限制,9个用户已经标记了rsvp,如果有2个用户同时进行RSVP(我只考虑并发的情况)
A -> select count(id) from user_meetup -> result : 9 hence go ahead
B -> select count(id) from user_meetup -> result : 9 hence go ahead
A -> insert ......
B -> insert ......
现在他们两个都会到位,我的数量变成了11, 我的解决方案是再添加一个表 user_meetup_count id,meetup_id,user_count(计数设置为0作为默认值,并在创建聚会时立即创建记录) 现在如果使用更新查询就好了 update user_meetup_count set user_count = user_count + 1其中user_count< 10 如果我根据上面查询更新的行数写入user_meetup表 如果它返回0意味着它已满,如果它返回1则我得到了地方
这样可以在2个用户同时尝试的情况下使用吗? 是我解决并发问题的方法吗? 有没有更好的办法 ? 测试此类情况的工具有哪些?
答案 0 :(得分:1)
在计算之前使用lock tables。插入后解锁。
或者您可以使用GET_LOCK然后使用RELEASE_LOCK。 使用此功能,您无需锁定所有条目表。
或者探索关于innodb表的gap locking主题。 有了这个,你需要使用交易。
您可以使用jMeter来测试您的查询。