Форум: "Базы";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизTIBTransaction и MIDAS Найти похожие ветки
← →
Desperado © (2004-08-25 08:26) [0]В хелпе про TIBTransaction есть такой интересный NOTE:
"In Midas applications, every query must be in its own transaction. You must use one transaction component for each query component."
Кто-нибудь знает, почему надо к каждому query прикреплять собственную транзакцию? Чем это вызвано?
← →
stud © (2004-08-25 09:16) [1]не обязательно. главное чтобы компонент был привязан хотябы к одной транзакции. можно иметь один компонент транзакции для всех компонентов
← →
stud © (2004-08-25 09:26) [2]пардон, спутал с прямым углом))
← →
Desperado © (2004-08-25 09:53) [3]>пардон, спутал с прямым углом))
чего????
т.е. то что ты сказал не верно?
← →
Romkin © (2004-08-25 10:14) [4]По моему мнению, немного не точно: скорее, у каждого провайдера должна быть своя транзакция. И все TIBQuery этого провайдера цепляются к ней, а их модет ведь быть не одна, когда делается связка мастер-деталь.
Дело в том, что TDatasetProvider пытается сам управлять своими транзакциями.
← →
Desperado © (2004-08-25 10:18) [5]Есть еще варианты истолкования данного хелпа?
← →
Romkin © (2004-08-25 10:39) [6]Почему тебя это так волнует? :)
TIBTransaction предназначена именно для того, чтобы каждый блок работал в своей транзакции, практически это и написано.
← →
Desperado © (2004-08-25 10:44) [7]Потому что мне намного удобнее использовать один компонент транзакции с несколькими query. Это существенно упрощает разработку. Но этот note в хэлпе меня немного пугает.
← →
Romkin © (2004-08-25 10:56) [8]Так ты МИДАС строишь?
http://rsdn.ru/article/db/midas.xml
Посмотри, как там сделано. Статья написана на D5, в IBX D6 у транзакции появилось свойство AutoStopAction, его обычно в saCommit надо ставить, все будет работать. И еще посмотреть примечание насчет TIBSQL ;)
Учитывать надо только одно: провайдер при общении с сервером открывает транзакцию, если она была закрыта. И если он ее открыл - то по окончании закрывает. Если открывал не он - она останется открытой :)
← →
Romkin © (2004-08-25 11:09) [9]В общем случае, сервер приложений предназначен для общения с OLTP системами: ни одна из них не любит длительных транзакций. Поэтому стремиться надо к следующей схеме: открыли транзакцию, взяли или изменили быстро данные, и закрыли ее. Провайдер старается делать именно так.
Поэтому ставь на главную форму сервера TIBSQLMonitor и отслеживай транзакции и запросы. Во-первых, многое станет понятно, во-вторых, когда видишь открытие транзакции, проход данных и сразу hard commit - все в порядке, транзакция подтверждена.
Другой вопрос в том, что у Interbase 6.5 и выше и у Firebird транзакция read read_committed не нагружает сервер, и может быть открыта сколько угодно долго. В этом случае можно ставить у cds PacketRecords положительным, в остальных случаях я бы не рекомендовал, провайдер держит транзакцию до окончания фетча ;)
← →
Desperado © (2004-08-25 14:28) [10]Спасибо за совет.
Статья помогла.
Таких коротких транзакций, к сожалению не получится...
Логика приложения такая :)
← →
Romkin © (2004-08-25 14:30) [11]Ерунда: Смотри сам, там на сервере приложений открываются таблицы и висят. Транзакций нет. А когда все сделал - тогда все и идет в БД, в одной транзакции.
← →
Desperado © (2004-08-25 16:07) [12]Я уже так и буду делать.
Все изменения хранить в кеше, а потом одной секундной транзакцией
все залью в БД.
Правда кода перелопачивать уйму придется :(
Кстати, транзакция будет не одна. Несколько, но одновременно.
Т.к. Датасетов несколько.
← →
Desdechado © (2004-08-26 10:48) [13]Ну, одна или не одна, это от логики зависит, а не от количества датасетов.
Транзакция - это набор изменений, который должен выполниться целиком или не выполниться вовсе.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c