pilot911:
если проходят деньги и есть нормальный коммит - это прекрасно и должно отработать независимо от следующих операций, которые могут быть второстепенными... лучше сразу это понять, имхо
Вот! В этом и заключается ошибка! Второстепенных операций НЕ БЫВАЕТ! Все инсёрты, апдейты и делиты очень важны! Даже если не нарушают целостность данных, всё равно они важны.
Покажу это на примере.
Допустим при каждом обращении авторизованного юзера, Вы в таблице `users` обновляете `date_last_visit`. При этом, если запрос не выполнится, то всем будет насрать то что у юзера не правильно отображаться "время последнего визита". На целостность данных это тем более не влияет. Вам наверное кажется, что это "второстепенный запрос"?
Хорошо. Представте: юзер переводит деньги со своего счёта на другой счет и, допустим, транзакция успешно коммитится, а время date_last_visit не обновляется. Но у Вас это второстепенный запрос, поэтому Вам на него насрать. Таким образом мы получим, что перевод денег был осуществлён в 22:30 - 10 сентября 2010, а время последнего визита юзера 20 мая 2010 года. Т.е. получаем, что юзер не был на сайте пол года, а деньги отправил кто-то другой!
Что теперь Вы думаете про "второстепенные запросы"?
P.S.> по этому тема топика названа РАЗМЫШЛЕНИЯ над транзакциями. Я ничего не утверждаю. Всё вышесказаное является моим ИМХО, но по моему, в современных приложениях транзакции используются не совсем корректно.
Или же все вышеперечисленные аргументы не являются весомымы.
1. Увеличивается время выполнения? Оказалось, что наоборот, внутри транзакций СКЛ-запросы выполняются намного быстрее.
2. Вы говорите, что скрипт необходимо разбивать на единичные не делимые (корпускулярные) операции? Вышеописанный пример демонстрирует, что не делимым должны быть ВСЕ инсерты, апдейты, делиты. Даже, те которые Вам кажутся абсалютно не важными.
3. ... возможно есть какой-то другой весомый аргумент?