2010-10-25 67 views
0

将我的codeiginter应用程序放入群集环境后,最近遇到问题。用户可以在点级获得网站奖励,点击提交后可以获取奖励我拥有获取奖励的当前积分级别的代码并将其保存在user_id表中,并且他们获得奖励的点数级别在。假设用户获得奖励后,将该奖励增加1分。我遇到了一个问题,2个用户可能同时点击提交,并且在记录表中它有两个用户在相同的点级别获得奖励,这是不应该发生的,因为它假设在每个点之后递增1点提交。行级锁定正在增加奖励行停止此问题?我如何实现它?是Mysql(innodb)行级锁定解决方案吗?

如果您需要了解更多信息或澄清,请告诉我。

  • 用户表
    ID
    用户名
    [...]

  • 奖励表
    ID

  • 记录表
    ID
    users_id
    rewards_id

在记录表中的点被假设是点的奖励是当用户提交的检索奖励的金额。

+0

请分享您的模式 – kovshenin 2010-10-25 16:24:28

+0

第一篇文章已更新 – 2010-10-25 16:33:20

回答

2

编号行级与表级锁定主要是性能问题。

您正在寻找的是交易。开始交易,增加点数,添加奖励,提交。要么整个​​交易完成,并且奖励和点数增加都立即完成,否则失败并且不会发生。

+0

好的,只要做了交易,如果其他人提交同时获得奖励,它会等到交易完成并获得新的积分金额? – 2010-10-25 16:32:56

+0

取决于您做的事情和交易设置的顺序,但是,通常如果您以'SELECT WHERE ID =:n FOR UPDATE'开始,则第二个执行相同操作的交易将等待直到第一个交易是“COMMIT”。 – bobince 2010-10-25 16:49:05

+0

而不是它不添加两个,问题是在它增加点之前,其他人可能点击提交 - 在那段时间内,点数增加之前。 – 2010-10-25 16:49:17