Представьте, что у нас есть следующая таблица:
+----+---------+--------+
| id | Name | Bunnies|
+----+---------+--------+
| 1 | England | 1000 |
| 2 | Russia | 1000 |
+----+---------+--------+
И у нас есть несколько пользователей, удаляющих кроликов в течение определенного периода времени, например, 2 часа. (Таким образом, минимум 0 кроликов, максимум 1000 кроликов, кролики возвращаются, а не добавляются пользователями)
Я использую два основных запроса транзакций, таких как
BEGIN;
UPDATE `BunnyTracker` SET `Bunnies`=`Bunnies`+1 where `id`=1;
COMMIT;
Когдакто-то возвращает зайчика и,
BEGIN;
UPDATE `BunnyTracker` SET `Bunnies`=`Bunnies`-1 where `id`=1 AND `Bunnies` > 0;
COMMIT;
когда кто-то пытается взять зайчика.Я предполагаю, что эти запросы будут реализовывать некоторую атомарность под капотом
Крайне важно, чтобы пользователи не могли брать больше зайчиков, чем в каждой стране, (т.е. -23 зайчика, если одновременно работают 23 пользователя)
Моя проблема в том, как мне сохранить безопасность ACID в этом случае, при этом имея возможность одновременно добавлять / увеличивать / уменьшать поле кроликов, оставаясь в пределах (0-1000), я мог бы установитьуровень изоляции до сериализованного, но я переживаю, что это снизит производительность.
Какие-нибудь советы?Заранее спасибо