Блокирует ли Mysql (innodb) уровень строк? - PullRequest
0 голосов
/ 25 октября 2010

Недавно столкнулся с проблемой после помещения моего приложения codeiginter в кластерную среду. Пользователи могут получать вознаграждения за сайты на уровне баллов, после нажатия кнопки «Отправить», чтобы получить вознаграждение. У меня есть код, который захватывает текущий уровень начисления вознаграждения, и сохранить его в таблице с user_id и уровнем баллов, который они получили за вознаграждение. в. предполагается, что это вознаграждение увеличивается на 1 пункт после того, как пользователь получит вознаграждение. Я столкнулся с проблемой, когда 2 пользователя могут нажать кнопку «Отправить» одновременно, и в таблице записей говорится, что оба пользователя получают вознаграждение на одном и том же уровне, что не должно происходить, поскольку предполагается, что приращение увеличивается на 1 пункт после каждого. Отправить. остановит ли эта проблема блокировку уровня строки в строке награды, которая увеличивается? и как мне это реализовать?

Если вам нужна дополнительная информация или разъяснения, дайте мне знать.

  • Таблица пользователей
    ID
    Имя пользователя
    [...]

  • Таблица вознаграждений
    ID
    Имя
    Точки

  • Таблица рекордов
    ID
    users_id
    rewards_id
    Точки

Предполагается, что количество баллов в таблице записей равно количеству баллов, которое было за вознаграждение, когда пользователь отправил запрос на получение вознаграждения.

1 Ответ

2 голосов
/ 25 октября 2010

Нет. Блокировка на уровне строк и на уровне таблиц - это прежде всего проблема производительности.

То, что вы ищете, это транзакции. Начать транзакцию, повысить уровень очков, добавить вознаграждение, зафиксировать. Либо вся транзакция завершается, и одновременно выплачиваются вознаграждение и повышение баллов, либо она терпит неудачу и ни один из них не происходит.

...