2010-10-25 37 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