Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5]      все
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
lazy fox
После того, как вы обломались с предложенной мной объектной моделью и предложили мне абстрагироваться от подробностей реализации, в базе есть такой объект.


Я не заметил никакой объектной модели.

lazy fox
Два разными приложения решают две разные задачи с двумя разными БД так, что структура и данные в БД совпадают в каждый момент времени. Напрягитесь.


Это не для среднего ума :-). Если хотите получить ответ по существу корректно поставьте задачу (и желательно без выражений типа "вкладывать смысл в цифры").
27 дек 04, 16:13    [1212434]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
lazy fox
Guest
serg99

Я не заметил никакой объектной модели.


Тогда вернитесь сюда и ответьте по существу.

serg99
Это не для среднего ума :-).


Ok )
27 дек 04, 16:23    [1212483]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
Alexey Rovdo
И все таки мне кажется что реальная сложность реализации такого механизма будет очень велика, а издержки СУБД возрастут фантастически. СУБД прийдется отслеживать все дерево транзакций, причем делать это всякий раз при выполнении любой транзакции! Почему?

Во-первых, нам как-то прийдется разделять транзакции на те, которые можно откатить и на те, которые откатить нельзя никогда (если я что-то хочу удалить навсегда, то я должен иметь такую возможность).

Во-вторых при выполнении любой транзакции нам прийдется вычислять (находить) все другие транзакции, откат которых она перекрывает (откат этих транзакций станет невозможен после выполнения текущей транзакции) и помечать их как зависящие от текущей транзакции. Если этого не делать, то откат любой закоммиченой транзакции должен сопровождаться анализом ВСЕХ имевших место после нее транзакций на предмет того, не блокируют ли они возможность отката именно этой транзакции.

Сам откат закоммиченой транзакции можно рассматривать как новую транзакцию, которая (см. во-вторых).

И если мы говорим об откате закоммиченной транзакции, то логичным будет и требование о возможности "анти-отката", т.е. мы откатили закоммиченную транзакцию, а потом взяли и опять "закатили".

Следует учесть возможность, когда откат какой-либо одной закоммиченой транзакции делает невозможным откат другой закоммиченой транзакции (а в исходном виде они откатываемы обе), т.е. откатить можно только одну из двух (или набора) транзакций (откатить обе нельзя ни при каких условиях).

И т.д. и т.п..

Все правильно в том числе про REDO. Кроме последнего абзаца. Встретив при откате конфликтную транзакцию можно попросить ее автора откатиться и "освободить дорогу". С тем же можно обратиться к администратору, который может откатить всех куда надо.


Alexey Rovdo
Интересно было бы увидеть оценки производительности такой системы в сравнении с традиционными СУБД и оценки места на диске, занимаемого всей этой информацией.
И вот если оценки будут таковы, что традиционные системы окажутся в десятки раз производительнее системы с возможностью отката закоммиченых транзакций, то вряд ли найдутся желающие такими монстрами пользоваться.

Мне самому интересно. Пока я не думаю что будет какой либо проигрыш по сравнению с традиционными системами.
27 дек 04, 16:26    [1212503]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
azhukov
Member

Откуда:
Сообщений: 356
serg99
Я знаю приложения где это нужно. Тем не менее может ли быть такая функция широко востребована?

В Oracle 10g есть возможность отката таблиц или даже всей БД назад (FLASHBACK TABLE|DATABASE)
27 дек 04, 17:07    [1212712]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
serg99
Мне самому интересно. Пока я не думаю что будет какой либо проигрыш по сравнению с традиционными системами.


Это потому, что вы пока совсем не думали над реализацией. Как вы отследите ситуацию, когда одна транзакция меняет таблицу А, пользуясь данными из таблицы Б ? Оператор откатил изменения в таблице Б - как вы обнаружите, что надо как-то править данные в А ?
27 дек 04, 17:24    [1212810]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
vybegallo
serg99
Мне самому интересно. Пока я не думаю что будет какой либо проигрыш по сравнению с традиционными системами.


Это потому, что вы пока совсем не думали над реализацией. Как вы отследите ситуацию, когда одна транзакция меняет таблицу А, пользуясь данными из таблицы Б ? Оператор откатил изменения в таблице Б - как вы обнаружите, что надо как-то править данные в А ?


В том то и дело, что во время выполнения второй транзакции прийдется все тщательно проанализировать, т.е. найти ту транзакцию(ии), которая вписала эти опорные данные в таблицу Б и сделать в ней пометку, что теперь ее нельзя откатить без отката этой второй транзации (т.е. оператор не сможет откатить изменения в таблице Б без отката изменений, внесенных в таблицу А).

И здесь мне совершенно непонятно как можно делать вывод об отсутствии проигрыша по сравнению с традиционными системами - объем вычислений увеличивается капитально.
27 дек 04, 17:49    [1212904]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
И это получается, что должен быть еще какой-то механизм, который бы задавал зависимости таблиц от таблиц при откатах/подкатах транзакций, что уже само по себе уменьшает производительность.

В общем, кричать то можно, а вот чтобы попробовать сделать, как-то смелости не хватает.......

-- Tygra's --
27 дек 04, 17:54    [1212929]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Yo!
Guest
автор
И это получается, что должен быть еще какой-то механизм, который бы задавал зависимости таблиц от таблиц при откатах/подкатах транзакций, что уже само по себе уменьшает производительность.


так слишком сложно, гораздо проще возвращать субд в консистентное состояние на конкретное время назад.
27 дек 04, 18:06    [1212966]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
А так сильно грубо - зачем откатывать работу других?

-- Tygra's --
27 дек 04, 18:08    [1212970]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
Это потому, что вы пока совсем не думали над реализацией.

Нет, не поэтому.

Как вы отследите ситуацию, когда одна транзакция меняет таблицу А, пользуясь данными из таблицы Б ? Оператор откатил изменения в таблице Б - как вы обнаружите, что надо как-то править данные в А ?

Есть способы. Но имеет смысл говорить, когда будет что показать.
27 дек 04, 18:56    [1213108]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
serg99
Это потому, что вы пока совсем не думали над реализацией.

Нет, не поэтому.

Как вы отследите ситуацию, когда одна транзакция меняет таблицу А, пользуясь данными из таблицы Б ? Оператор откатил изменения в таблице Б - как вы обнаружите, что надо как-то править данные в А ?

Есть способы. Но имеет смысл говорить, когда будет что показать.


Это вам КАЖЕТСЯ, что вы знаете, что "есть способы".
Оператор ошибся, вбивая дату для чистки. Затем десять заданий _прочитали_ эту неправильную дату и почистили сорок таблиц.
Расскажите, как ваша система сможет откатить транзакцию смены даты и восстановить удаленные строки во всех таблицах. Можно без деталей, на пальцах.
27 дек 04, 20:05    [1213188]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
Оператор ошибся, вбивая дату для чистки. Затем десять заданий _прочитали_ эту неправильную дату и почистили сорок таблиц.
Расскажите, как ваша система сможет откатить транзакцию смены даты и восстановить удаленные строки во всех таблицах. Можно без деталей, на пальцах.

Зависит от того каким образом связаны задания и факт вбивания даты зачистки. Как Вы разруливаете такую ситуацию стандартными средствами?
27 дек 04, 20:57    [1213239]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
serg99
Оператор ошибся, вбивая дату для чистки. Затем десять заданий _прочитали_ эту неправильную дату и почистили сорок таблиц.
Расскажите, как ваша система сможет откатить транзакцию смены даты и восстановить удаленные строки во всех таблицах. Можно без деталей, на пальцах.

Зависит от того каким образом связаны задания и факт вбивания даты зачистки. Как Вы разруливаете такую ситуацию стандартными средствами?


"Разруливаем" мы такую ситуацию просто - выводим оператора за сарай и табельным оружием... разруливаем . :-)

До вас таки начало доходить, что нужны связи ? Ну так у меня для вас плохие новости - эти связи хранятся исключительно в голове разработчика. Иногда, если повезет - описаны в устаревшей и неполной документации.
27 дек 04, 21:43    [1213275]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
"Разруливаем" мы такую ситуацию просто - выводим оператора за сарай и табельным оружием... разруливаем . :-)

Да...., Жестоко :-). У Вас наверное потому и документация неполная, что разработчики при жизни не успевают ее дописывать.

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

Да нет здесь ничего плохого. Просто есть разные уровни связности алгоритмов. При непосредственной связи, когда например задания по зачистке вызываются как триггера по изменению даты в рамках одной транзакции, откат всего происходит откатом основной транзакции. Если связь опосредованная (разные приложения), но хотя бы известно какое приложение смотрит в дату и может что то плохое делать, то откаты организуются независимо для связанных приложений (одно откатывает изменение даты, другие откатывают свои зачистки). Если вы уже поубивали всех разработчиков и вообще не понятно что и почему в базе происходит, но видно, что с такого то времени произошло что то плохое, то администратор откатывает всех к этому времени.

Другими словами логика откатов является частью логики приложения и закладывается в приложение тем же программистом у которого до выхода за сарай что то в голове было, и это "что то" собственно и было воплощено в приложении. Если приложение написано без применения дополнительной функциональности БД по откатам, то остается только последний вариант, когда проблемы решаются как правило администратором на уровне всей БД.
28 дек 04, 01:31    [1213386]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
serg99
"Разруливаем" мы такую ситуацию просто - выводим оператора за сарай и табельным оружием... разруливаем . :-)

Да...., Жестоко :-). У Вас наверное потому и документация неполная, что разработчики при жизни не успевают ее дописывать.

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

Да нет здесь ничего плохого. Просто есть разные уровни связности алгоритмов. При непосредственной связи, когда например задания по зачистке вызываются как триггера по изменению даты в рамках одной транзакции, откат всего происходит откатом основной транзакции. Если связь опосредованная (разные приложения), но хотя бы известно какое приложение смотрит в дату и может что то плохое делать, то откаты организуются независимо для связанных приложений (одно откатывает изменение даты, другие откатывают свои зачистки). Если вы уже поубивали всех разработчиков и вообще не понятно что и почему в базе происходит, но видно, что с такого то времени произошло что то плохое, то администратор откатывает всех к этому времени.

Другими словами логика откатов является частью логики приложения и закладывается в приложение тем же программистом у которого до выхода за сарай что то в голове было, и это "что то" собственно и было воплощено в приложении. Если приложение написано без применения дополнительной функциональности БД по откатам, то остается только последний вариант, когда проблемы решаются как правило администратором на уровне всей БД.


Логика откатов выходит за пределы логики приложений, и никем никогда в приложение не закладывается. По крайней мере, я таких приложений БД не видел.
Кстати, к тому времени как станет "видно, что с такого то времени произошло что то плохое", откатывать назад ВСЕ транзакции будет поздно - если это вообще возможно в условиях проектируемой системы.
Короче, ваша предполагаемая функциональность может и пригодится в некоей сферической системе в вакууме, с одним сферическим юзером - но программист, который попытается ее использовать, должен быть публично казнен в назидание. Ибо нефиг !
28 дек 04, 02:49    [1213400]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
ChA
Member

Откуда: Москва
Сообщений: 11404
vybegallo
Как вы отследите ситуацию, когда одна транзакция меняет таблицу А, пользуясь данными из таблицы Б ? Оператор откатил изменения в таблице Б - как вы обнаружите, что надо как-то править данные в А ?

IMHO, очень удачный пример. Возможность отката отдельных транзакций еще с трудом можно представить в однопользовательской среде или, в крайнем случае, когда данные, с которыми работают отдельные пользователи в принципе не пересекаются. Это в Word-е можно сделать UNDO, а в многопользовательской среде, когда чтение и изменение одних и тех же данных выполняется достаточно хаотично и непредсказуемо, отследить что откатывать, а что нет, практически(!) нереально. Не говоря уж о том, что часть информации в виде отчетов выходит наружу и может фиксироваться различными органами, и они могут неправильно понять, когда им скажут, что отчет за 1 квартал отменен, так как там были ошибки, а теперь они исправлены и вот вам другая версия. В таких случаях, за сарай могут отвести не одного человека :)
Короче, любая попытка реализации обойдется чрезвычайно дорого, а польза будет не столь велика. Из разряда 1% возможностей, которые на 99% не будет использоватся на практике.

P.S. Резюм: хорошо бы попасть в рай, да грехи не пустят... :)
28 дек 04, 03:18    [1213409]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
x
Guest
serg99
А какая логика отката Вас бы устроила?
В Вашем примере один пользователь меняет одно поле записи, второй - другое. После чего первый откатывает изменение своего поля.

Это меня не устроит даже на уровне read commited.
А на более высоких уровнях, как это уже отмечалось другими авторами, нужно еще отслеживать блокировки других таблиц.

Поэтому, если можно, приведите, пожалуйста, принципиальное описание алгоритма отката (о деталях реализации не спрашиваю - это наверно секрет фирмы :).
28 дек 04, 13:07    [1214658]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
Логика откатов выходит за пределы логики приложений, и никем никогда в приложение не закладывается. По крайней мере, я таких приложений БД не видел.

И не могли видеть. Управляемые клиентом откаты теперешними базами ведь фактически не поддерживаются.

Кстати, к тому времени как станет "видно, что с такого то времени произошло что то плохое", откатывать назад ВСЕ транзакции будет поздно - если это вообще возможно в условиях проектируемой системы.

Если Вы проектируете системы где нет документации, неизвестно что с БД делает то или иное приложение, и где проблемы могут быть обнаружены только когда уже поздно их исправлять, то согласитесь что "поздно боржоми пить когда печень отвалилась". Здесь никакая СУБД Вам не поможет.

Короче, ваша предполагаемая функциональность может и пригодится в некоей сферической системе в вакууме, с одним сферическим юзером - но программист, который попытается ее использовать, должен быть публично казнен в назидание. Ибо нефиг !

Возьмем хотя бы Оракл. В этом треде уже упоминались и механизм архивных файлов повторного исполнения, и Flash Recovery появившийся в версии 10g (http://www.mid.main.vsu.ru/docs/oracle10/server.101/b10734/rcmflash.htm), и в некоторой степени механизм Workplace. Все это хотя и непрозрачно, с определенными ограничениями, и ориентировано в основном на случаи потери данных, - но все это об откатах. Скажем Flash Recovery может использовать уже и программист.

Получается Оракл работает на потребу сферического узера или это просто издержки западной демократии не приветствующей использование табельного оружия для администрирования БД? :-)
28 дек 04, 22:34    [1216634]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
x
В Вашем примере один пользователь меняет одно поле записи, второй - другое. После чего первый откатывает изменение своего поля.

Это меня не устроит даже на уровне read commited.
А на более высоких уровнях, как это уже отмечалось другими авторами, нужно еще отслеживать блокировки других таблиц.

Поэтому, если можно, приведите, пожалуйста, принципиальное описание алгоритма отката (о деталях реализации не спрашиваю - это наверно секрет фирмы :).


Все три транзакции (два изменения и один откат) изолированы как сериализуемые транзакции и все что надо отслеживается.
28 дек 04, 22:41    [1216639]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
serg99
Логика откатов выходит за пределы логики приложений, и никем никогда в приложение не закладывается. По крайней мере, я таких приложений БД не видел.

И не могли видеть. Управляемые клиентом откаты теперешними базами ведь фактически не поддерживаются.

Кстати, к тому времени как станет "видно, что с такого то времени произошло что то плохое", откатывать назад ВСЕ транзакции будет поздно - если это вообще возможно в условиях проектируемой системы.

Если Вы проектируете системы где нет документации, неизвестно что с БД делает то или иное приложение, и где проблемы могут быть обнаружены только когда уже поздно их исправлять, то согласитесь что "поздно боржоми пить когда печень отвалилась". Здесь никакая СУБД Вам не поможет.

Короче, ваша предполагаемая функциональность может и пригодится в некоей сферической системе в вакууме, с одним сферическим юзером - но программист, который попытается ее использовать, должен быть публично казнен в назидание. Ибо нефиг !

Возьмем хотя бы Оракл. В этом треде уже упоминались и механизм архивных файлов повторного исполнения, и Flash Recovery появившийся в версии 10g (http://www.mid.main.vsu.ru/docs/oracle10/server.101/b10734/rcmflash.htm), и в некоторой степени механизм Workplace. Все это хотя и непрозрачно, с определенными ограничениями, и ориентировано в основном на случаи потери данных, - но все это об откатах. Скажем Flash Recovery может использовать уже и программист.

Получается Оракл работает на потребу сферического узера или это просто издержки западной демократии не приветствующей использование табельного оружия для администрирования БД? :-)


Те возможности Оракла, которые вы считаете "откатами закоммиченных транзакций", правильно называть "восстановлением данных из сохраненных копий". Это есть фича полезная, но полезная именно для администратора, который понимает, что он делает, и каковы будут последствия. Ни о какой автоматической проверке целостности данных речь, естественно, не идет, и администратор несет всю ответственность за содеянное.
Вы же предлагаете встраивать подобную крайне опасную возможность в программу. Типа ткнул на кнопочку -и готово. Вы сначала научите юзеров правильно приложения закрывать ! :-)
29 дек 04, 00:50    [1216746]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
curious.
Guest
А сколько баксо-дней просят за эту лапшу на ваших ушах? Ж)
29 дек 04, 01:01    [1216753]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
x
Guest
serg99
Все три транзакции (два изменения и один откат) изолированы как сериализуемые транзакции и все что надо отслеживается.
Ну, если все, что надо отслеживается, то я за (правда приведенный пример этому противоречит).
29 дек 04, 09:51    [1217053]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5]      все
Все форумы / Сравнение СУБД Ответить