Страница 1 из 2

Selective transaction rollback

Добавлено: 08 окт 2003, 17:23
Xa-xa
Есть такая идея -- делать селективный откат транзакций. Смысл в том, чтобы во время работы ДБ собирать информацию и зависимостях между транзакциями. Потом, если обнаруживается одна плохая транзакция, делать селективный откат этой транзакции и тех транзакций, которые от нее зависили и только их.

Подробности здесь:

http://www.ecsl.cs.sunysb.edu/rdms

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

Добавлено: 08 окт 2003, 18:26
Marmot
А если поверх наложились другие транзакции?

Добавлено: 08 окт 2003, 18:38
Alexander Ch.
Marmot писал(а):А если поверх наложились другие транзакции?
Who cares?!

Добавлено: 08 окт 2003, 18:55
Marmot
А вот можно ли в ДБ сделать versioning?
Не удaлять значения совсем, а записывать их в history?
Тогда что нибудь такое можно было бы сделать :-)
Да и вообще было бы полезно.
Для long running transaction compensation.

Добавлено: 08 окт 2003, 19:57
Lepsik
Библиотека 'SQL-UNDO 3' для MSSQL2000

http://www.gvu.newmail.ru/sqlundo3.zip

Позволяет откатывать старые закоммиченные транзакции. Готовый сервис UNDO в многопользовательской системе. Подробности в файле Readme. Это следующая версия нижеследующего продукта, но абсолютно переделана и продвинута. Удалось убрать кучу ограничений, свойственной предыдущей версии.

Добавлено: 09 окт 2003, 07:57
Xa-xa
Marmot писал(а):А вот можно ли в ДБ сделать versioning?
Не удaлять значения совсем, а записывать их в history?
PostgreSQL так и работает. При каждом апдейте строки он создает новую копию, а струю делает невидимой. Эта фича MVCC зовется:

http://www.postgresql.org/docs/7.3/static/mvcc.html

Добавлено: 09 окт 2003, 08:00
Xa-xa
Lepsik писал(а):Библиотека 'SQL-UNDO 3' для MSSQL2000

http://www.gvu.newmail.ru/sqlundo3.zip

Позволяет откатывать старые закоммиченные транзакции. Готовый сервис UNDO в многопользовательской системе. Подробности в файле Readme. Это следующая версия нижеследующего продукта, но абсолютно переделана и продвинута. Удалось убрать кучу ограничений, свойственной предыдущей версии.
Ага, видел я это. Насколько я понимаю, эта библиотека -- просто user interface к бинарному логу MS SQL. Идея той системы о которой я говорил выше -- собирать информацию о зависимостях между транзакциями и потом удалять их селективно, а не все сразу.

Добавлено: 09 окт 2003, 08:30
Marmot
Xa-xa писал(а):
Marmot писал(а):А вот можно ли в ДБ сделать versioning?
Не удaлять значения совсем, а записывать их в history?
PostgreSQL так и работает. При каждом апдейте строки он создает новую копию, а струю делает невидимой. Эта фича MVCC зовется:

http://www.postgresql.org/docs/7.3/static/mvcc.html
Это не совсем то, что я имел ввиду...
Вот если бы все старые версии оставались бы в ДБ и были бы доступны по transaction ID тогда можно было бы поумному откатывать любую из старых транзакций.

Добавлено: 09 окт 2003, 09:47
папа Карло
Marmot писал(а):Вот если бы все старые версии оставались бы в ДБ и были бы доступны по transaction ID тогда можно было бы поумному откатывать любую из старых транзакций.
они остаются :) для начала давайте подумаем что такое транзакция. транзакция это операция переводящая БД из одного целостного состояния в другое. В Оракле насколько я знаю есть механизм спуститься на любую точку времени. В СКЛ Сервере это тоже есть. Все что есть в этой работе это еще один путь к решению проблемы востановления данных. Я говорю что сегодня при правильном построении системы известными способами данный подход не требуется. Я скажу более....

1. Размещение вещей ответственных за целостность и безопасность данных на клиенте не правильно.

2. При наличи в системе одной таблицы которая обновляется при любом изменение в любом месте ведет к локам и потере конкурентности что ведет к удорожанию ТСО и стоимости транзакции что в свою очередь ведет к экспоненциальному графику масштабируемости, когда он должен быть линейным. Я готов утверждать что на некоторых системах это будет не 6-8% оверхед, а гораздо больше. Даже при наличии оверхеда 6-8% приводит к потере 10000 транзакций в минуту для системы в 100-150 тпм, что есть ой-ой. :)

3. Любая система строится на основе бизнес правил, а не на основе текникал решений. Данная работа позиционируется как универсальный подход для любых систем. Существуют системы с нетривиальной логикой и с зависимыми аггрегатами (например), в конце концов с кривым дизайном.... и при раскрутке транзакций возникает необходимость выборочного коммита "посередине". Т.е. автоматической раскрутки дерева просто не получается.

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

Добавлено: 09 окт 2003, 10:21
Marmot
Сейчас есть очень реальная проблема в B2B: компенсация давно закоммиченных транзакций.

>В Оракле насколько я знаю есть механизм спуститься на любую точку времени. В СКЛ Сервере это тоже есть.
Это будет глобальный откат, а хочется инивидуальный... и умный...

ЗЫ компенсация!=rollback

Добавлено: 09 окт 2003, 10:23
папа Карло
Marmot писал(а):Сейчас есть очень реальная проблема в B2B: компенсация давно закоммиченных транзакций.

>В Оракле насколько я знаю есть механизм спуститься на любую точку времени. В СКЛ Сервере это тоже есть.
Это будет глобальный откат, а хочется инивидуальный... и умный...
индивидуальный и умный я делал руками в течении суток когда на попойку тогда не пришел... из-за сложности логики я прям сейчас не вижу как это можно было сделать автоматически даже используя предложенный вариант.

Добавлено: 09 окт 2003, 10:25
Marmot
папа Карло писал(а):
Marmot писал(а):Сейчас есть очень реальная проблема в B2B: компенсация давно закоммиченных транзакций.

>В Оракле насколько я знаю есть механизм спуститься на любую точку времени. В СКЛ Сервере это тоже есть.
Это будет глобальный откат, а хочется инивидуальный... и умный...
индивидуальный и умный я делал руками в течении суток когда на попойку тогда не пришел... из-за сложности логики я прям сейчас не вижу как это можно было сделать автоматически даже используя предложенный вариант.
Так я не про то, что там народ предлагает, а про полный и глубокий versioning!
IMHO тогда компенсацию можно автоматизировать

Добавлено: 09 окт 2003, 10:28
папа Карло
Marmot писал(а):Так я не про то, что там народ предлагает, а про полный и глубокий versioning!
IMHO тогда компенсацию можно автоматизировать
ты оверхед и стоимость решения представляешь? :mrgreen:

Добавлено: 09 окт 2003, 10:30
Marmot
папа Карло писал(а):
Marmot писал(а):Так я не про то, что там народ предлагает, а про полный и глубокий versioning!
IMHO тогда компенсацию можно автоматизировать
ты оверхед и стоимость решения представляешь? :mrgreen:
Ага, представляю, но CPU,RAM, HDD сейчас дешевеют со страшной скоростью, так что не всё так плохо...
Это может быть новый тип DBs, запатентовать что-ли :-)

Добавлено: 09 окт 2003, 11:17
Yocto
папа Карло писал(а):1. Размещение вещей ответственных за целостность и безопасность данных на клиенте не правильно.
Такие вещи физически и не могут быть размещены за пределами досягаемости сервера базы.
Однако предоставление возможности управлять данным процессом со стороны клиента - вполне разумно.
Пример - isolation levels.