Я работаю над бэкэндом игры. Игроки сначала покупают свои билеты, которые хранятся в базе данных, затем они играют и могут выиграть определенные призы. Каждый игрок может купить не более 60 билетов.Как избежать блокировки db
Появилось новое требование, устанавливающее верхнюю границу для общего количества билетов за игру - 10 000 билетов. Реализация будет включать добавление к конечной точке покупки теста, проверяющего, что общее количество купленных билетов в это время + количество билетов, необходимых для текущей покупки, меньше или равно максимальному количеству билетов для этой игры, чтобы купить быть принятым.
Проблема в том, что, вычисляя текущее количество купленных билетов, используя счет в таблице билетов, возвращаемое значение может быть устаревшим, потому что в то же время другие игроки могли купить билеты.
Возможным решением является блокировка таблицы билетов во время покупки, но это может негативно отразиться на производительности и удобстве использования. Пожалуйста, дайте мне знать, если у вас другая идея.
Вместо блокировки на уровне базы данных вы считаете, что используете [Семафор] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)? –
Если у вас есть личность, и вы никогда не удаляете личность, вместо того, чтобы делать счет, вы можете max и min, а затем просто вычитать их друг от друга, чтобы получить счет сразу. – Hozikimaru