Одновременная покупка товара?

Имеется интернет магазин. Товары в нем имеют поле количество на складе. Как в ситуации, когда при покупке товара, количество которого равно 1, двумя пользователями одновременно, избежать того, что оба оплатят товар. т.к. запросы асинхронные, то простая проверка на условие равно 0 тут не поможет.
  • Вопрос задан
  • 172 просмотра
Решения вопроса 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
это называется Race Condition. Решения бывают разные, от модификации запросов с идентификатором состояния и заканчивая очередями с 1 синхронным обработчиком (RabbitMQ будет более чем достаточно).

Ну и да, транзакции применять обязательно - это единственный механизм последовательного выполнения запросов в базах данных. Если же база не поддерживает транзакции то только свои очереди
Ответ написан
@Vitsliputsli
Наиболее простое решение - это блокировка данных на период выполнения бизнесовой транзакции, либо модификации запросов с идентификатором состояния. Конкретное решение будет зависить от вашей архитектуры и типа СУБД. Одного использования sql транзакций недостаточно, т.к. стандартный уровень изолированности транзакций не блокирует данные. Зачастую выбирают механизм SELECT FOR UPDATE, но его крайне не рекомендуют использовать в MySQL (во всяком случае в 5.7), да и в Oracle бывают сложности с ним.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Откройте для себя удивительный мир транзакций.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы