Контроль
Две вещи, ради которых учёт пишут на транзакциях, а не на «прочитал — посчитал — записал»: гонка одновременных запросов и сверка витрины с журналом.
Гонка двух запросов
Два отдельных PHP-процесса в один и тот же момент резервируют весь свободный остаток ремня YCH-330. Каждый держит транзакцию 400 мс.
Запустите оба варианта и сравните полосы: с блокировкой второй процесс ждёт, без неё оба «успешно» продают одно и то же.
Сверка витрины с журналом
Для каждой позиции остаток из витрины сравнивается с суммой проводок журнала.
Сверок ещё не было
Сценарий
1. «Сломать витрину» — имитация бага: кто-то сделал
2. «Сверить» — сверка находит позицию и показывает, на сколько разошлось.
3. «Пересчитать из журнала» — витрина восстанавливается из проводок, повторная сверка чистая.
UPDATE stock_balances в обход журнала.2. «Сверить» — сверка находит позицию и показывает, на сколько разошлось.
3. «Пересчитать из журнала» — витрина восстанавливается из проводок, повторная сверка чистая.
Сброс демо
Стартовые остатки, шесть заказов и журнал — как при первом открытии