Как избежать блокировки БД

Я работаю над бэкендом игры. Игроки сначала покупают свои билеты, которые хранятся в базе данных, затем они играют и могут выиграть определенные призы. Каждый игрок может купить максимум 60 билетов.

Появилось новое требование, устанавливающее верхнюю границу для общего количества билетов на игру - 10 000 билетов. Реализация будет включать добавление к конечной точке покупки тестовой проверки того, что общее количество купленных билетов в это время + количество билетов, необходимых для текущей покупки, меньше или равно максимальному количеству билетов для этой игры, чтобы покупка быть принятым.

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

Возможное решение - заблокировать таблицу заявок во время покупки, но это может отрицательно сказаться на производительности и удобстве пользователей. Пожалуйста, дайте мне знать, если у вас есть другая идея.

1 ответ

Решение

Если у вас жесткие ограничения, вы должны избегать одновременного совершения нескольких покупок. Вероятно, соответствующая блокировка таблицы в БД - лучший способ выполнить такую ​​сериализацию. Могут быть и другие альтернативы (например, выполнение сериализации где-нибудь на внешнем интерфейсе), но они, вероятно, будут сложнее в реализации, более подвержены ошибкам и хуже работают.

Фактически, может быть трудно заставить вашу игру демонстрировать согласованное поведение вообще без соответствующей блокировки в БД. С другой стороны, вам, вероятно, не нужна явная блокировка. Если вы сконфигурируете свою базу данных с соответствующим уровнем изоляции транзакции, тогда она должна сделать всю необходимую блокировку для вас.

Поскольку здесь нет явного выигрыша, я рекомендую отложить вопрос о производительности до тех пор, пока вы действительно не сможете проверить свою производительность. Если окажется, что он недостаточно хорош, то по фактическим измерениям вы можете определить, какие части системы больше всего выиграют от настройки.

Другие вопросы по тегам