Оптимистичная или пессимистичная блокировка: что выбрать и как не поймать дедлок?
Пессимистичная блокировка — вы заранее захватываете строку (SELECT ... FOR UPDATE), и конкуренты ждут. Хороша, когда конфликты частые и повторять работу дорого: списание остатка, резерв места. Платите ожиданием, риском дедлоков и тем, что блокировка живёт до конца транзакции. Оптимистичная — вы читаете строку вместе с версией, а при записи проверяете, что версия не изменилась; если изменилась, операция отклоняется и повторяется. Хороша, когда конфликты редки, а между чтением и записью есть длинная пауза — например, форма редактирования у пользователя. Правило выбора: считайте вероятность конфликта и цену повтора. Дедлоки лечатся не ретраями, а порядком: захватывайте строки всегда в одном порядке (например, по возрастанию первичного ключа) и держите транзакцию короткой.