powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Концепция undo/redo persistent transactions в ООБД Cerebrum
25 сообщений из 49, страница 1 из 2
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33830124
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем!

На общее внимание и обсуждение выносится концепция undo/redo persistent transactions в ООБД Cerebrum . Возможно кто то найдет в ней дырки или возможность к усовершенствованию. Это поможет мне сделать свою ООБД более эффективной и полезной.

Важной особенностью СООБЗ Cerebrum является отличие в реализации транзакций по сравнению с общепринятой реализацией в базах данных. Система поддерживает многоуровневые undo/redo persistent однопользовательские транзакции. Undo/redo persistent transactions позволяют организовать общепринятую в пользовательском интерфейсе функциональность undo/redo на уровне ядра БД. Это помогает реализовать на основе ядра Cerebrum приложения CAD/CAM активно взаимодействующие с пользователем и требующие функциональность undo/redo.

Транзакции могут быть двух видов: с версионированием объектов и без версионирования объектов. Транзакции могут находиться в грязном и чистом состоянии. При создании новой транзакции с версионированием объектов предыдущее состояние всех объектов сохраняется в хранилище и создаются новые версии измененных объектов. При выполнении операции undo актуализируются предыдущие сохраненные версии объектов, а новые изменения становятся невидимыми. При выполнении операции redo происходит обратный процесс – измененные версии объектов вновь становятся видимыми. При многократном выполнении операций undo/redo производится актуализация версий объектов соответствующих транзакции выбранной операциями undo/redo.
В случае создания транзакции без версионирования объектов, новые версии объектов не создаются, изменения накапливаются в версиях ближайшей предыдущей транзакции с версионированием, а текущей транзакции присваивается статус «чистая». В случае завершения чистой транзакции по CommitTransaction транзакция остается в чистом состоянии, счетчик TransactionCount уменьшается на 1. В случае завершения чистой транзакции без версионирования по RollbackTransaction предыдущая транзакция переходит в грязное состояние, счетчик TransactionCount уменьшается на 1. В случае завершения грязной транзакции без версионирования по RollbackTransaction предыдущая транзакция переходит в грязное состоянии, счетчик TransactionCount уменьшается на 1. Завершение грязной транзакции по CommitTransaction либо создание новой следующей транзакции недопускается. В случае завершения грязной транзакции с версионированием все изменения объектов, накопленные в пределах данной версии откатываются. Если в процессе выполнения операции undo/redo актуализируется транзакция без версионирования то актуализируются версии объектов ближайшей к предыдущей транзакции с версионированием.

Для того чтобы посмотреть как это работает можно сделать следующее:
1. Скачать ООБД Cerebrum http://www.shuklin.com/download.aspx?file=ru_cerebrum_sdk
2. Развернуть архив и запустить файл Binary\Application\Debug\Cerebrum.DesktopClient.exe
3. Выбрать из меню File\Streams-01 пункт New Stream …
4. Подтвердить параметры создаваемой БД нажатием кнопки OK
5. Ввести имя файла создаваемой БД и подтвердить его создание нажав Save
6. Начать транзакцию нажав Begin
7. Заполнить БД тестовыми данными нажав Populate Images
8. Убедиться, что последнее созданное изображение имеет номер 099. Для этого перейти в конец списка и выделить последний элемент. Под списком отображается количество элементов в списке, общее количество транзакций / номер текущей активной тарнзакции.
9. Начать транзакцию нажав Begin
10. Заполнить БД тестовыми данными нажав Populate Images
11. Убедиться, что последнее созданное изображение имеет номер 199. Для этого перейти в конец списка и выделить последний элемент.
12. Повторить пункты 6. и 7. еще 5 раз. В результате в списке должно быть создано 8 транзакций и 700 элементов.
13. Убедиться, что последнее созданное изображение имеет номер 699. Для этого перейти в конец списка и выделить последний элемент.
14. Выполнить команду UNDO нажав на кнопку со стрелкой влево ‘<’
15. Убедиться, что последнее созданное изображение имеет номер 599 и текущая транзакция имеет номер 7.
16. Выполнить команду UNDO нажав на кнопку со стрелкой влево ‘<’
17. Убедиться, что последнее созданное изображение имеет номер 499 и текущая транзакция имеет номер 6.
18. Выполнить команду REDO нажав на кнопку со стрелкой вправо ‘>’
19. Убедиться, что последнее созданное изображение имеет номер 599 и текущая транзакция имеет номер 7.
20. Закрыть БД
21. Закрыть оболочку
22. Заново запустить файл Binary\Application\Debug\Cerebrum.DesktopClient.exe
23. Выбрать из меню File\Streams-01 пункт Open Stream …
24. Найти файл ранее созданной БД и подтвердить его открытие нажав Open
25. Убедиться, что последнее созданное изображение имеет номер 599 и текущая транзакция имеет номер 7.
26. Выполнить команду REDO нажав на кнопку со стрелкой вправо ‘>’
27. Убедиться, что последнее созданное изображение имеет номер 699 и текущая транзакция имеет номер 8.
28. Откатить все созданные транзакции выполнив 7 раз команду Rollback
29. В процессе отката убедится в последовательном уменьшении общего количества транзакций и элементов в списке.
30. Закрыть БД
31. Закрыть оболочку


С уважением,
Шуклин Дмитрий
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33830323
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Шуклин Дмитрий !
Ничего не имею против Вас или Вашего продукта, но не могли бы Вы создать один топик типа "ООБД Cerebrum", и в нем поднимать все вопросы связанные с ее функциональностью ?

P.S. Возможно неправ, но мне кажется, что этот форум предназначен не для продвижения "ООБД Cerebrum". При взгляде на список последних тем создается обратное впечатление.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33830332
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар! Ты чё? Больной?
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33830886
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начиная с "В случае создания транзакции без версионирования объектов, новые версии объектов не создаются, изменения накапливаются в версиях ближайшей предыдущей транзакции с версионированием.." мне непонятна ваша
.. хмм концепция. Что значит "изменения накапливаются в версиях ближайшей предыдущей транзакции с версионированием"? Какие такие изменения? А если предыдущей транзакции с версионированием нету? Тады где они накапливаются и накапливаются ли вообще? Какая транзакция у вас чистая, какая грязная. Дайте определение.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33830937
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще не вижу где их можно использовать. Объясните если не трудно.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33830997
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Petro123
Если сами мыслите в терминах арифметики, то нечего всех туда загонять...

2 ChA
Как я понял проект не комерческий, так что и рекламы никакой нет. Просто человек хочет понять, что он делает правильно/неправильно и послушать, что люди предложат. А обсуждать разные куски в одной ветке не очень удобно...

2 shuklin
Понравилась идея применния вашей СООБЗ для CAD/CAM/т.п. Если действительно можно будет реализовать концепцию модификации одного чертежа/сбоки несколькими пользователями одновременно, то просто супер. Ща некогда разбираться в предложенной концепции redo/undo, поэтому по сабжу ничего не пишу. Удачи.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831005
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabrainНачиная с "В случае создания транзакции без версионирования объектов, новые версии объектов не создаются, изменения накапливаются в версиях ближайшей предыдущей транзакции с версионированием.." мне непонятна ваша
.. хмм концепция. Что значит "изменения накапливаются в версиях ближайшей предыдущей транзакции с версионированием"? Какие такие изменения? А если предыдущей транзакции с версионированием нету? Тады где они накапливаются и накапливаются ли вообще? Какая транзакция у вас чистая, какая грязная. Дайте определение.

Привет.

Ща попробую объяснить.

Есть два режима функционирования ядра. С версионированием и без версионирования. Задается при создании БД. После создания БД изменить этот режим невозможно. Режим без версионирования работает быстрее но в нем не работает почти все обсуждаемое в данной теме - поэтому будем рассматривать только режим с версионированием.

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

При создании первой пользовательской транзакции (фактически это уже будет вторая транзакция) она создается с версионированием всегда. Независимо от того просили мы ее с версионированием или нет. Таким образом всегда имеется предыдущая транзакция с версионированием (даже две). Если после создания этой транзакции были изменения объектов - то они попадают в proposed версию.

Эти две транзакции имеют несколько особое положение в системе и имеют для удобства обозначения original & proposed.

При старте следующей транзакции мы имеем свободу выбора. Запустить ее с версионированием или без. Без версионирования это будет похоже на транзакции MS-SQL когда бегинов может быть сколько угодно, а реальный роллбак только один. Чтобы сохранить соответвсие N бегинов - N rollbacks or commits я не рубаю в таком режиме все по первому же роллбак. Если допустим третьей и четрвертой пошли транзакции без версионирования то они получили статус чистых. После роллбака четвертой, третья получит статус грязной. Так как третья и четвертая без версионирования, то ближайшая предыдущая транзакция с версионированием - вторая. Именно в ней и будут накоплены все изменения. При ролбаке четвертой третья станет грязной. Закомитить ее будет невозможно (ибо валидация - хотя технически можно было бы но зачем?). При ролбаке третьей грязной станет вторая. При ролбаке второй - так как она с версионированием, будут удалены все версии объектов, которые в нее входят. Первая останется чистой. Измененные объекты прийдут к своему начальному состоянию.

Допустим мы не ролбачили ни третью ни четвертую а создали 5ю с версионированием. Тогда текущие изменения объектов будут накапливаться в 5й. и undo/redo пробегая по 1, 2 и 5й будут менять состояние всех аффектед объектов. При проходе 3й и 4й undo/redo будут оставлять активными изменения ближайшей предыдущей к ним транзакции с версионированием - тоесть 2й. Далее если стартовать 6ю без версионирования - то она будет по отношению к 5й так же как и 3я по отношению ко 2й.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831017
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bas Понравилась идея применния вашей СООБЗ для CAD/CAM/т.п. Если действительно можно будет реализовать концепцию модификации одного чертежа/сбоки несколькими пользователями одновременно, то просто супер. В этом одна из больших светлых целей. Спасибо. В принципе по типу file-sever (aka MS-Access) накрутить многопользовательский доступ вполне реально координально не меняя текущего ядра. Еще можно сделать single - thread service и попробовать реализовать client-server на основе .NET Remoting. Но client - server на single-thread OODB - несколько примитивно. В планах кое что по вкуснее.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831034
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabrainИ еще не вижу где их можно использовать. Объясните если не трудно. Текущую версию можно использовать как библиотеку классов обеспечивающую продвинутую сериализацию пользовательских объектов в файл в деск-топ приложении. Тоесть это "конкурент" structured storage от MS. На основе такой библиотеки можно сделать формат файла для приложения по типу Excel / Visio. например активная семантическая сеть очень похожа на чертеж Visio с формулами от Excel в узлах. Транзакции undo|redo позволят не парится с собственной реализацией версионирования изменений. Для формата файла документа, который должен хранить много сериализованных .NET объектов и если требуется предоставить пользователю функциональность undo/redo при изменении документа
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831154
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял о чем вы говорите. А такой вопрос. Допустим завершили мы успешно транзакцию, а потом выясняем что нафиг этого делать было не надо, а транзакция x-надцатая подтвержденная. И вдруг выясняется, она неправильная и надо вернуться к x-yнадцатой. Что делать в этом случае?
В вашей системе восстановление невозможно (как я понял).
И согласование транзакций при многопользовательской работе у вас не объяснено, а хотелось бы услышать.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831208
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bas
вы не участвовали в религиозных войнах про ООСУБД? ТОГДА МЫ ИДЁМ К ВАМ :))

ООСУБД быстрее ЛЮБЫХ решений с реляционными системами ? (1,2,3,4,5,6,7,8,все) [new] Alexey Rovdo
http://www.sql.ru/forum/actualthread.aspx?tid=146255&pg=1&hl=%ee%ee%f1%f3%e1%e4+rovdo
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831338
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabrainЯ понял о чем вы говорите. А такой вопрос. Допустим завершили мы успешно транзакцию, а потом выясняем что нафиг этого делать было не надо, а транзакция x-надцатая подтвержденная. И вдруг выясняется, она неправильная и надо вернуться к x-yнадцатой. Что делать в этом случае?
для конкретики. все транзакции с версионированием.
имеем 1, 2, 3, 4, 5

Допустим мы закомитили 5ю. тогда все ее изменения залились на 4й уровень. Осалось
1, 2, 3, (4+5)

Закомитили 4ю, потом 3ю получили

1, (2 + 3 + 4 + 5)

вот тут как раз точка последнего принятия решения. Или коммит - тогда все proposed изменения станут original и тогда уже хана - ничего не откатить, или наоборот сделаем rollback и вся работа будет уничтожена.

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

undo/redo ходит по этой цепочке.

MegabrainВ вашей системе восстановление невозможно (как я понял). Ну после того как окончательный коммит проведен - ролбак невозможен. тут полная аналогия с обычными системами.

MegabrainИ согласование транзакций при многопользовательской работе у вас не объяснено, а хотелось бы услышать.
Это полностью открытый вопрос. ядро сингл треад со всеми вытекающими. многопользовательская будет одним из следующих этапов. планы я раскрывать не буду. а то что доступно для давнлоада - пажалста.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831341
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 bas
вы не участвовали в религиозных войнах про ООСУБД? ТОГДА МЫ ИДЁМ К ВАМ :))

ООСУБД быстрее ЛЮБЫХ решений с реляционными системами ? (1,2,3,4,5,6,7,8,все) [new] Alexey Rovdo
http://www.sql.ru/forum/actualthread.aspx?tid=146255&pg=1&hl=%ee%ee%f1%f3%e1%e4+rovdo
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!

может вас это и удивит, а может и нет, но толпа не определяет ничего. из того что толпа не в состоянии получить выгоду из ООБД не значит, что на этих БД некоторые индивидуумы не в состоянии заработать и главное решать задачи промышленного уровня.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831535
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA
P.S. Возможно неправ, но мне кажется, что этот форум предназначен не для продвижения "ООБД Cerebrum". При взгляде на список последних тем создается обратное впечатление.
Считается правильным только продвижение oracle, ms sql и далее по линейке что-ли?
Все имеют право голоса, а не только админы указанных субд
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831536
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabrainДопустим завершили мы успешно транзакцию, а потом выясняем что нафиг этого делать было не надо
Приколисты. Успешно завершили то, что нафиг не нужно. Можно только поздравить
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831537
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmСчитается правильным только продвижение oracle, ms sql и далее по линейке что-ли?
Все имеют право голоса, а не только админы указанных субдВосхищен Вашим умением читать между строк. Считается правильным, если темы соответствуют наименованию форума. Здесь, как правило, обсуждаются вопросы проектирования БД, а не СУБД. Каким боком к нему относится сообщения Дмитрия Шуклина, мне, лично, непонятно. Впрочем, если неправ, то модератор форума всегда может меня поправить.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831539
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA iscrafmСчитается правильным только продвижение oracle, ms sql и далее по линейке что-ли?
Все имеют право голоса, а не только админы указанных субдВосхищен Вашим умением читать между строк. Считается правильным, если темы соответствуют наименованию форума. Здесь, как правило, обсуждаются вопросы проектирования БД, а не СУБД. Каким боком к нему относится сообщения Дмитрия Шуклина, мне, лично, непонятно. Впрочем, если неправ, то модератор форума всегда может меня поправить.
ChA, от оракла, мс скл уже нудит. Хочется чего то новенького почитать. Сколько можно то :)
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831541
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmChA, от оракла, мс скл уже нудит. Хочется чего то новенького почитать. Сколько можно то :)Да, ради Бога. Всего лишь высказался на тему несоответствия темы форуму. Ну другие здесь темы должны быть, IMHO.

P.S. Поверьте, меня от соседнего форума мутит не меньше...
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831659
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm MegabrainДопустим завершили мы успешно транзакцию, а потом выясняем что нафиг этого делать было не надо
Приколисты. Успешно завершили то, что нафиг не нужно. Можно только поздравить

А вы что никогда в жизни не ошибались? И зачем тогда по вашему нужен данный механизм?
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831800
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shuklinможет вас это и удивит, а может и нет, но толпа не определяет ничего. из того что толпа не в состоянии получить выгоду из ООБД не значит, что на этих БД некоторые индивидуумы не в состоянии заработать и главное решать задачи промышленного уровня.
хм. здесь много таких. Очень много узкоспециализированных, готовых буквально с пеной у рта доказывать, что отсутствие какой-то, широко известной в узких кругах, фичи в субд нелюбимого производителя является ее недостатком. И этот недостаток не дает такой СУБД права на жизнь. И т.д. и т.п. Не туда постите свои тексты в общем. Если конечно не хотите погрязнуть в бестолковых спорах :)
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831821
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabrainА вы что никогда в жизни не ошибались? И зачем тогда по вашему нужен данный механизм?
То что Вы описАли, не объясняет природу транзакций. Фичи субд, позволяющие по журналу транзакций выполнить откат бд назад к понятию транзакции не относится.
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33831976
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm MegabrainА вы что никогда в жизни не ошибались? И зачем тогда по вашему нужен данный механизм?
То что Вы описАли, не объясняет природу транзакций. Фичи субд, позволяющие по журналу транзакций выполнить откат бд назад к понятию транзакции не относится.

А я что где-то объяснял природу транзакций?
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33832034
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megabrain
А я что где-то объяснял природу транзакций?
Не объясняли. Извините, просто фраза повеселила :)
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33832243
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm Megabrain
А я что где-то объяснял природу транзакций?
Не объясняли. Извините, просто фраза повеселила :)
:0)X
...
Рейтинг: 0 / 0
Концепция undo/redo persistent transactions в ООБД Cerebrum
    #33832303
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:-o
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Концепция undo/redo persistent transactions в ООБД Cerebrum
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]