Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Commit и CommitRetaining 
:(
    Опции темы
Delphist
  Дата 13.3.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



У меня возник вопрос, можно ли сказать, что с позиции СУБД

FIBQuery.Transaction.CommitRetaining

это тоже самое, что

FIBQuery.Transaction.Commit;
FIBQuery.Open;


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Deniz
Дата 13.3.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



FIBQuery для СУБД вообще по барабану.
CommitRetaining и Commit, можно сказать, с некоторой оговоркой, одно и то же.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
TObject
Дата 13.3.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



CommitRetaining - подтверждает сделанные изменения, но не закрывает НД - тоесть не нужно тянуть снова данные на клиент, а при Commit приходится переоткрывать НД, так что это не одно и тоже.
PM MAIL   Вверх
Deniz
Дата 13.3.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



TObject, ну и расскажи чем так они сильно отличаются
Цитата(Delphist @  13.3.2008,  12:54 Найти цитируемый пост)
с позиции СУБД

Про то как это работает с клиента я уже говорил в соседней ветке и не стал повторяться


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
TObject
Дата 13.3.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Deniz @ 13.3.2008,  15:33)
TObject, ну и расскажи чем так они сильно отличаются
Цитата(Delphist @  13.3.2008,  12:54 Найти цитируемый пост)
с позиции СУБД

Цитата

"...Короткую транзакцию не нужно завершать CommitRetaining. На самом деле CommitRetaining просто продлевает жизнь транзакции, а соответственно из "короткой" превращает ее в длинную. То есть, для сервера завершение по CommitRetaining будет сохранять все те побочные эффекты, которые вызываются длинными транзакциями..."
 - это не разница?

Взято с http://www.ibase.ru

PM MAIL   Вверх
Delphist
Дата 13.3.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(TObject @  13.3.2008,  17:03 Найти цитируемый пост)
для сервера завершение по CommitRetaining будет сохранять все те побочные эффекты, которые вызываются длинными транзакциями..."

И что это за побочные эффекты?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
TObject
Дата 13.3.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Delphist @ 13.3.2008,  16:47)
И что это за побочные эффекты?

Цитата
...Не рекомендуется слишком часто завершать одну и ту же транзакцию по retaining, или производить в каждом таком "интервале" много изменений - это чревато появлением ошибки 287 "too many savepoints" в interbase.log. Кроме того, транзакция, завершаемая по CommitRetaining, с точки зрения сервера и сборки мусора выглядит как длительно работающая транзакция SNAPSHOT (то есть, CommitRetaining в этом плане не является аналогом Commit). А это значит, что CommitRetaining фактически препятствует сборке мусора, независимо от типа транзакции - Snapshot или ReadCommitted... 
 http://www.ibase.ru

PM MAIL   Вверх
Akella
Дата 13.3.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



я лично вообще не использую CommitRetaining
PM MAIL   Вверх
Delphist
Дата 13.3.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Я так и ничего не понял, чем плоха CommitRetaining
Вот пользователь в нес изменения затем нажимаем кнопку сохранить по которой срабатывает CommitRetaining т.е. как я понимаю в БД произойдет Commit + на клиентскую часть пересылаются все обновления, тогда как простой Commit , вызовет на сервер коммит, но обновления (имеется ввиду обновления которые закоммитили другие пользователи за время, пока вносил изменения мой пользователь) на клиентскую часть не предут, и в что же, тогда плохого в CommitRetaining

Это сообщение отредактировал(а) Delphist - 13.3.2008, 17:54


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
TObject
Дата 13.3.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Delphist @ 13.3.2008,  17:51)
Вот пользователь в нес изменения затем нажимаем кнопку сохранить по которой срабатывает CommitRetaining т.е. как я понимаю в БД произойдет Commit + на клиентскую часть пересылаются все обновления,
 Не все обновления, а только те что сделаны этой таранзакцией, если другие пользователи будут редактировать эту же таблицу то изменений не будет видно пока не переоткрыть НД. Тогда как при простом Commit НД прийдется переоткрыть и будет видно все изменения которое были сделаны другими пользователями.
PM MAIL   Вверх
Delphist
Дата 13.3.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(TObject @  13.3.2008,  19:35 Найти цитируемый пост)
Тогда как при простом Commit НД прийдется переоткрыть и будет видно все изменения которое были сделаны другими пользователями. 

Что-т я так и не понял по твоим словам получается, что необходимо переоткрывать НД и при CommitRetaining'e и при Commit'e


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
TObject
Дата 14.3.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Delphist @ 13.3.2008,  19:38)
Что-т я так и не понял по твоим словам получается, что необходимо переоткрывать НД и при CommitRetaining'e и при Commit'e

При CommitRetaining Ваш НД остается открытым, но Вы не видите изменения сделанные другими пользователями. 

При Commit НД закроется сам (по крайней мере у меня так) и его прийдется открыть по новой. соответсвенно видим все изменения.

Тоесть если нужно все время иметь свежие данные в НД, то прийдется переоткрывать в обеих случаях. 
PM MAIL   Вверх
Delphist
Дата 14.3.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(TObject @  14.3.2008,  10:44 Найти цитируемый пост)
При CommitRetaining Ваш НД остается открытым, но Вы не видите изменения сделанные другими пользователями. 

При Commit НД закроется сам (по крайней мере у меня так) и его прийдется открыть по новой. соответсвенно видим все изменения.

И все же чем же плох CommitRetaining по отношению к Commit'y

Нашел вот эту цитату:
Код

...Не рекомендуется слишком часто завершать одну и ту же транзакцию по retaining, или производить в каждом
таком "интервале" много изменений - это чревато появлением ошибки 287 "too many savepoints" в interbase.log. Кроме того,
транзакция, завершаемая по CommitRetaining, с точки зрения сервера и сборки мусора выглядит как длительно работающая
транзакция SNAPSHOT (то есть, CommitRetaining в этом плане не является аналогом Commit). А это значит, что
CommitRetaining фактически препятствует сборке мусора, независимо от типа транзакции - Snapshot или ReadCommitted... 


Но из нее я так и ничего непонял и что значит CommitRetaining фактически препятствует сборке мусора, а простой коммит что не препятствует, и каком вообще мусоре идет речь?

Это сообщение отредактировал(а) Delphist - 14.3.2008, 09:57


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
TObject
Дата 14.3.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Delphist @ 14.3.2008,  09:57)
Но из нее я так и ничего непонял и что значит CommitRetaining фактически препятствует сборке мусора, а простой коммит что не препятствует, и каком вообще мусоре идет речь?

"Мусор" - это старые версии записей (результат многоверсионности), а вообще-то вот статья, читайте: http://www.ibase.ru/devinfo/oitoat.htm и вообще там есть много чего по СУБД IB/FB
PM MAIL   Вверх
Deniz
Дата 14.3.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(TObject @  13.3.2008,  19:03 Найти цитируемый пост)
 - это не разница?
согласен. +

Статья на ibase.ru

Цитата(Delphist @  14.3.2008,  12:57 Найти цитируемый пост)
Но из нее я так и ничего непонял и что значит CommitRetaining фактически препятствует сборке мусора, а простой коммит что не препятствует, и каком вообще мусоре идет речь?
не столько препятствует, сколько ...
для начала:
Цитата
Физически завершение транзакции по Retaining стартует новую транзакцию (если изменений в транзакции не было, то транзакция реально не завершается), но с сохранением контекста предыдущей. Для SNAPSHOT в контекст попадает локальная копия таблицы состояния транзакций, которая была сохранена в момент старта этой транзакции. В результате, сколько бы не выполнялось retain-завершений для snapshot, эта транзакция будет всегда видеть только те данные, которые существовали именно в момент ее старта, а не в момент retain-завершений. Для транзакций ReadCommitted committed-изменения других транзакций видны независимо от retain-завершения.
Из изложенного следует, что завершать snapshot-транзакции по retaining особого смысла не имеет, т.к. вероятность конфликтов тем выше, чем дольше длится snapshot-транзакция.
из этого имеем: если контекст транзакции не изменился, значит просто удерживаются версии записей(мусор) этой транзакции, сл-но только они и не попадут под сборку мусора. Мусор все равно соберется.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0888 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.