![]() |
|
![]() ![]() ![]() |
|
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
У меня возник вопрос, можно ли сказать, что с позиции СУБД
FIBQuery.Transaction.CommitRetaining это тоже самое, что FIBQuery.Transaction.Commit; FIBQuery.Open; -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
FIBQuery для СУБД вообще по барабану.
CommitRetaining и Commit, можно сказать, с некоторой оговоркой, одно и то же. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
TObject |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
CommitRetaining - подтверждает сделанные изменения, но не закрывает НД - тоесть не нужно тянуть снова данные на клиент, а при Commit приходится переоткрывать НД, так что это не одно и тоже.
|
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
TObject, ну и расскажи чем так они сильно отличаются
Про то как это работает с клиента я уже говорил в соседней ветке и не стал повторяться -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
Взято с http://www.ibase.ru |
||||
|
|||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
И что это за побочные эффекты? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
|
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
я лично вообще не использую CommitRetaining
|
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Я так и ничего не понял, чем плоха CommitRetaining
Вот пользователь в нес изменения затем нажимаем кнопку сохранить по которой срабатывает CommitRetaining т.е. как я понимаю в БД произойдет Commit + на клиентскую часть пересылаются все обновления, тогда как простой Commit , вызовет на сервер коммит, но обновления (имеется ввиду обновления которые закоммитили другие пользователи за время, пока вносил изменения мой пользователь) на клиентскую часть не предут, и в что же, тогда плохого в CommitRetaining Это сообщение отредактировал(а) Delphist - 13.3.2008, 17:54 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
TObject |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
|
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Что-т я так и не понял по твоим словам получается, что необходимо переоткрывать НД и при CommitRetaining'e и при Commit'e -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
TObject |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
При CommitRetaining Ваш НД остается открытым, но Вы не видите изменения сделанные другими пользователями. При Commit НД закроется сам (по крайней мере у меня так) и его прийдется открыть по новой. соответсвенно видим все изменения. Тоесть если нужно все время иметь свежие данные в НД, то прийдется переоткрывать в обеих случаях. |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
И все же чем же плох CommitRetaining по отношению к Commit'y Нашел вот эту цитату:
Но из нее я так и ничего непонял и что значит CommitRetaining фактически препятствует сборке мусора, а простой коммит что не препятствует, и каком вообще мусоре идет речь? Это сообщение отредактировал(а) Delphist - 14.3.2008, 09:57 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
TObject |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
"Мусор" - это старые версии записей (результат многоверсионности), а вообще-то вот статья, читайте: http://www.ibase.ru/devinfo/oitoat.htm и вообще там есть много чего по СУБД IB/FB |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
согласен. +
Статья на ibase.ru не столько препятствует, сколько ... для начала:
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Какое-то противоречие И еще если у меня транзакция в открыта режиме ReadCommited, то тогда получается что Commited и CommitedRetaining одно, а если в режиме snapshot, то тогда Commited и CommitedRetaining не много разные вещи, правильно ли понял? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
не видит изменения других транзакций, кроме своих, пока не переоткроется НД. |
||||
|
|||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
никакого противоречия нет.
Мусор появляется не только от одной транзакции. Допустим стартанули 2 транзакции. 1. прочитала, потом добавила/обновила/удалила записи потом Commit. 2. прочитала, потом добавила/обновила/удалила записи потом CommitRetaining. Так вот мусор от первой транзакции соберется, а от 2 нет.
Так вот для клиента(при CommitRetaining) НД не закрывается и показывается весь текущий локальный кеш для записей. Новые данные поступят только после переоткрытия, сл-но если нужны правильные(новые) данные, то делать CommitRetaining + DataSet.Open нет никакого смысла, лучше CommiT + DataSet.Open. И это логично, т.е. CommitRetaining подтверждает другим транзакциям, что данные изменились. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
To Deniz: В предидущем посте Вы действительно написали не совсем понятно, может думали иначе.
|
||||
|
|||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
а какие изменения можно увидеть на клиенте, не переоткрыв НД? Это же как отчет, напечатал смотришь, второй раз напечатал, смотришь новые данные.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
TObject |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
Я понимаю. Просто затупил на счет написаного в статье. Уже дошло. ![]() |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
А почему от второй не убирается мусор, ведь же CommitRetaining как бы содерджит в себе Commit, т.е. данные одназначно закомичены и откатить их нельзя, зачем тогда сервер сохраняет мусор (промежуточные изменения)? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
да, интересная тема.
это особенно интересно... и как бы его вычистить безболезненно)) |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
Как уже было выше сказано транзакция которая подтерждена по CommitRetaining остается активной, а соответсвенно является "заинетесованной" в тех записях с которыми она работает, поэтому другие транзакции не могут чистить "мусор" пока она не завершится по Commit.
Ну во-первых в сборке "мусора" участвует каждая транзакция, в том числе и read-only. Во-вторых backup БД делает уборку "мусора". В-третьих параметр sweep interval задает значение при достижении которого произойдет sweep. |
||||
|
|||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
TObject, спасибо
|
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
делать COMMIT, а мусор сам соберется со временем, если только sweep interval > 0, если 0 мусор вообще собираться не будет
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Что значит "заинетесованной", не совсем понятно? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |