1

我正在使用mysql,php。表 user_meetup id, user_id, meetup_id 具有唯一性 (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 where user_count < 10 如果我根据上面查询更新的行数写入 user_meetup 表,如果它返回 0 表示它已满,如果它返回 1 我得到了这个地方

如果 2 个用户同时尝试,这会起作用吗?我解决并发问题的方法对吗?有没有更好的办法 ?测试这种情况的工具是什么?

4

1 回答 1

1

在计数之前使用锁表。并在插入后解锁。

或者你可以使用GET_LOCK然后RELEASE_LOCK有了这个,您不需要锁定所有条目表。

或者探索关于innodb 表的间隙锁定的主题。有了这个,您需要使用事务。

您可以使用jMeter来测试您的查询。

于 2013-06-26T12:08:40.673 回答