Вопрос проверяет понимание атомарности операций и защиты финансовых данных от неконсистентных состояний.
Операции с балансом напрямую связаны с деньгами и не допускают частичного выполнения. Если списание или пополнение не транзакционны, система может зафиксировать только часть изменений. Это приводит к потерям средств или их «появлению из воздуха». Транзакции гарантируют целостность данных даже при ошибках.
Транзакция — это набор операций, который либо выполняется полностью, либо не выполняется вообще.
Баланс — это агрегированное состояние, которое легко повредить при сбоях.
Атомарность операций
списание и запись в журнал должны быть единым целым
нельзя допустить выполнение только одного шага
Защита от сбоев
падение сервиса
таймауты
ошибки сети
Корректность конкурентного доступа
несколько запросов одновременно
защита от race condition
BEGIN;
INSERT INTO balance_operations(user_id, amount);
UPDATE users SET balance = balance - amount WHERE id = user_id;
COMMIT;
Без транзакции любое прерывание между шагами приводит к нарушению баланса.
Транзакции — обязательное требование для любых финансовых операций, где цена ошибки слишком высока.