теория
Смотри, «двойное списание» мы закрыли идемпотентностью — и это, оказывается, была лёгкая история. Вторая, с минусом на счёте, глубже, и чтобы в ней разобраться, надо честно понять, что такое и что она тебе обещает.
Транзакция — это группа операций, которые выполняются как одно целое: либо все вместе, либо ни одной. За этим стоит знакомый акроним : атомарность (всё или ничего), согласованность, изоляция, долговечность. Три из четырёх свойств обычно понятны без пояснений, а вот изоляция — источник почти всех денежных сюрпризов.
Дело в том, что транзакции идут не по одной, а толпой, одновременно. И — это, по сути, договор: какие гонки между одновременными транзакциями база берёт на себя, а какие тихо оставляет тебе. И вот что важно: по умолчанию база оставляет тебе больше, чем ты думаешь.
Уровней несколько, по нарастанию строгости:
Ключевая мысль, которую индустрия усвоила кровью: более слабая изоляция не значит „сломанная“ — она значит „часть гонок теперь твоя забота“. База по умолчанию быстрая и слабая. Хочешь сильных гарантий — проси их явно и плати за них. А чем именно платишь — в следующей теории. Сначала посмотрим, как невинная с виду проверка баланса уводит счёт в минус.