On 01.07.2011 23:55, A K wrote:

Транзакций существенно меньше чем CRUD операций как правило.

я понимаю, что в общем случае их будет меньше. Но, например, накопил я
в логе десять изменений в разных таблицах. Идет комит транзакции.
Мне все равно придется выполнить десять EXECUTE STATEMENT к внешней
базе, причем каждый EXECUTE STATEMENT будет открывать-закрывать коннект.

так?


Можно и в одном соединении это делать.

Но реальная причина в другом - в другую(-ие) БД должны попадать только те изменения, которые подтверждены в данной БД. В противном случае при любом откате транзакции базы начнут разбегаться. В отличии от того же MS SQL в Firebird одно удовольствие лог транзакций вести, не полагаясь на всякие там часы и т.п. Причем если текущая транзакция отвалится, то из записей в журнале не будет (а можно использовать и временные таблицы). Да и такую модель можно развить в асинхронную оффлайн репликацию если понадобиться.

А вот с синхронной репликацией на уровне триггеров есть реальный шанс получить большие проблемы (по моему скромному мнению это путь в никуда). Т.к. стабильные соединения бывают только в "сферическом вакууме". И порой достаточно одного сбоя на миллион операций, чтобы случилась "непоправимая" разбежка и лавинообразное возрастание количества ошибок.


Ответить