Разговор про InterBase 7.1 + Delphi
Прочитав на сайте информацию по транзакциям понял мало.
Во всех написанных мной программах транзакция была только одна, постоянно открытая. При внесении пользователем (или программой) изменений в базу я вызывал Commit. При нажатии пользователем Cancel - вызывал Rollback.
Почитав понял, что неправ.Как исправиться - не знаю.
Есть ли отработанные варианты, которые используются профессионалами.. Типа одна Read_Commited и одна Write - транзакция...
Разумная Расстановка Транзакций
про
Транзакция это блок изменений, которые либо применяются (все) по commit, либо отменяются (все) по rollback. Соответственно приложение должно управлять транзакциями с точки зрения бизнес-логики - перенести деньги с одного счета на другой, создать накладную, и т.п.
Поэтому например компонентов IBTransaction в приложении должно быть столько, сколько нужно. Под "нужно" понимается например - нужно читать справочники? Создаем транзакцию read read_committed и в ней читаем их все. Нужно смотреть список накладных? Создаем транзакцию read write read_committed и смотрим накладные. Нужно создать новую накладную? Открываем форму создания накладной, стартуем новую транзакцию, заполняем накладную, по OK делаем commit. Или - открываем форму, заполняем, по OK стартуем транзакцию, пихаем накладную в БД, делаем commit.
И так далее в таком духе.
это почти что смешно, или наоборот грустно.Типа одна Read_Commited и одна Write - транзакция...
Транзакция это блок изменений, которые либо применяются (все) по commit, либо отменяются (все) по rollback. Соответственно приложение должно управлять транзакциями с точки зрения бизнес-логики - перенести деньги с одного счета на другой, создать накладную, и т.п.
Поэтому например компонентов IBTransaction в приложении должно быть столько, сколько нужно. Под "нужно" понимается например - нужно читать справочники? Создаем транзакцию read read_committed и в ней читаем их все. Нужно смотреть список накладных? Создаем транзакцию read write read_committed и смотрим накладные. Нужно создать новую накладную? Открываем форму создания накладной, стартуем новую транзакцию, заполняем накладную, по OK делаем commit. Или - открываем форму, заполняем, по OK стартуем транзакцию, пихаем накладную в БД, делаем commit.
И так далее в таком духе.
К сожалению надо экономить
Длинная (долгая транзакция) это не есть хорошо.Klyk писал(а):Девиз прост
"Не надо экономить на транзакциях")
После прочтения статьи "Жизненый цикл траназкций ", возникает вопрос - как задать в Delphi, транзакцию "Read committed, read only"?
мда. а www.ibase.ru/devinfo/ibtrans.htm читал? а двойной клик на IBTransaction делал?
и потом, человек тебе пишет, что не надо экономить на транзакциях, т.е. не делать одну транзакцию на приложение, а ты ему про "долгую транзакцию". Где связь?
и потом, человек тебе пишет, что не надо экономить на транзакциях, т.е. не делать одну транзакцию на приложение, а ты ему про "долгую транзакцию". Где связь?