Заморачиваться стоит, когда нужны транзакции
Чего бы для примера взять?.. Знакомый ДБА говорит, что объяснять лучше на деньгах - быстрее понимают.
Например, делаем цифровую покупку: нам надо списать 100 рублей с баланса пользователя и записать строку в купленные товары пользователя.
Если мы сначала спишем 100 рублей, а затем по какой-нибудь причине умрём (электричество кончилось или банально памяти не хватило) - то на балансе деньги пропадут, а покупки так и не появится. Придётся связываться с саппортом, негативные эмоции клиенту, геморрой программистам в поиске потерянной покупки.
Если наоборот - сначала оформим покупку, а затем захотим списать деньги - внезапно окажется, что у пользователя денег и нету на балансе. Вклинился в другом потоке процесс с другой покупкой и всё списал. Опять айайай и печалька. Ну или опять умерли на полпути - покупка есть и деньги остались.
И тут приходит транзакционность и даёт возможность выполнить оба запроса как одно целое. Или оба запроса будут выполнены и наступит commit или оба запроса будут отменены.
Или когда надо чего-то много записать. commit на каждый запрос всё-таки весьма дорого, там много работы в фоне с транзакционным логом, чтобы ни в коем случае не потерять данные.
|