Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Путешествия в прошлое / 25 сообщений из 121, страница 1 из 5
18.09.2014, 15:42
    #38750573
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Здравствуйте!

Интересует, доводилось ли кому-нибудь проектировать базу данных таким образом, чтобы в программе можно было выбрать дату и посмотреть полное состояние всей системы на это время без артефактов, естественно без возможностей изменения данных? Как будто был произведён откат, но без использования отката, т.е. на уровне данных.

При чём в режиме "исторического просмотра" должны полноценно работать все функции системы (просмотр, фильтрация, сортировки и т.д.), кроме создания/изменения данных.
...
Рейтинг: 0 / 0
18.09.2014, 15:51
    #38750589
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Это недешевая фича, как с точки зрения разработки, так и с точки зрения производительности (данных больше, ключи больше, и т.п.), целую систему с таким функционалом делают редко. Какие-то элементы - да, бывает.
Rocket scienc'а в общем-то никакого нет, просто много геморроя.
...
Рейтинг: 0 / 0
18.09.2014, 16:16
    #38750652
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Кот Матроскин,

Жаль... А я думал, может есть готовая к употреблению методология.
...
Рейтинг: 0 / 0
18.09.2014, 16:24
    #38750669
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVostt А я думал, может есть готовая к употреблению методология. Бакапы, логи. Вы платите только за лишнее дисковое пространство.
...
Рейтинг: 0 / 0
18.09.2014, 16:29
    #38750677
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVosttА я думал, может есть готовая к употреблению методология.
Есть. "Flashback query" называется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.09.2014, 17:17
    #38750745
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Dimitry SibiryakovЕсть. "Flashback query" называется.

Не, ретроспективные запросы -- это возможности конкретной СУБД, хотя было бы круто, если можно было бы включить "ретроспективный режим" на всё подключение (например, указать временной штамп прям в строке соединения), то это бы решало задачу.

Но в целом интересует именно решение на уровне схемы базы данных, в отрыве от конкретной СУБД (может с некоторыми оговорками, допустим, чтобы это работало как минимум в MS SQL, Oracle, Postgre SQL).

Я себе это как вижу. В каждой таблице добавить поле типа HistoryId, которое ссылается на оригинальную запись. При любом изменении записи, создаётся копия со значением HistoryId, указывающую на оригинал. На уровне организации доступа к данным, записи с заполненным полем HistoryId игнорируются. В режиме ретроспективы, всегда берётся самая свежая запись, с датой изменения меньше указанного временного штампа. Не понятно только как толком восстанавливать связи, с учётом ретроспективы.
...
Рейтинг: 0 / 0
18.09.2014, 17:21
    #38750752
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
SERG1257Бакапы, логи. Вы платите только за лишнее дисковое пространство.

Вопросы использования дискового пространства и производительности в данном случае второстепенны. Озвучена задача, чтобы в программе в любой момент времени можно было посмотреть состояние системы в указанный момент времени. Совсем старые записи можно архивировать (допустим, годовые). Больше интересует просмотр состояния в течение года/полугода.

А бекапы, логи, -- это совсем другое.
...
Рейтинг: 0 / 0
18.09.2014, 17:28
    #38750759
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVosttхотя было бы круто, если можно было бы включить "ретроспективный режим" на
всё подключение (например, указать временной штамп прям в строке соединения), то это бы
решало задачу.
Oracle ConceptsPackaged applications, like report generation tools that only do
queries, can run in Flashback Query mode by using logon triggers . Applications can
run transparently without requiring changes to code .

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.09.2014, 17:29
    #38750761
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVostt,

одним HistoryID Вы не отделаетесь - надо вводить периоды актуальности для каждой записи. И тогда да, при обновлении Вы закрываете период актуальности текущей записи и создаете новую с открытым периодом.
Проблема еще в том, что не получится пользоваться внешними ключами "из коробки" - придется их заменять на ручные constraint'ы (и таким образом лишать оптимизатор дополнительной информации).
...
Рейтинг: 0 / 0
18.09.2014, 17:38
    #38750774
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Кот МатроскинПроблема еще в том, что не получится пользоваться внешними ключами "из
коробки" - придется их заменять на ручные constraint'ы
Ну почему же не получится... У одного из моих пользователей есть такая безумная система: в
каждом первичном ключе есть поле версии, соответственно связи вторичных ключей идут
id+версия. Куча вьюшек превращают update любой записи в insert записи с новой версией +
копирование всех дочерних записей с новой версией.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.09.2014, 17:51
    #38750789
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Кот Матроскин одним HistoryID Вы не отделаетесь - надо вводить периоды актуальности для каждой записи. И тогда да, при обновлении Вы закрываете период актуальности текущей записи и создаете новую с открытым периодом.Ну старые версии можно скидывать в дополнительные таблицы, оставляя основное приложение неизменным, а для ретроспективных запросов объединять историческую таблицу с базовой.
...
Рейтинг: 0 / 0
18.09.2014, 17:59
    #38750796
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVostt Озвучена задача, чтобы в программе в любой момент времени можно было посмотреть состояние системы в указанный момент времени. И решением этой задачи будет восстановление системы с бакапа на определенный момент времени - базовый фунционал любого админа. Никаких изменений в коде (стало быть никаких багов, ни для ретроспективных запросов, ни для боевой программы).
Минусом будет только время на восстановление для большой базы.
...
Рейтинг: 0 / 0
18.09.2014, 19:12
    #38750864
prog123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVosttЗдравствуйте!

Интересует, доводилось ли кому-нибудь проектировать базу данных таким образом, чтобы в программе можно было выбрать дату и посмотреть полное состояние всей системы на это время без артефактов, естественно без возможностей изменения данных? Как будто был произведён откат, но без использования отката, т.е. на уровне данных.

При чём в режиме "исторического просмотра" должны полноценно работать все функции системы (просмотр, фильтрация, сортировки и т.д.), кроме создания/изменения данных.

В какой области по-вашему это наиболее востребовано?
У меня есть то, что вам нужно:)
...
Рейтинг: 0 / 0
18.09.2014, 19:30
    #38750879
prog123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Вот оно это путешествие в прошлое
...
Рейтинг: 0 / 0
18.09.2014, 19:41
    #38750893
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Dimitry SibiryakovhVosttхотя было бы круто, если можно было бы включить "ретроспективный режим" на
всё подключение (например, указать временной штамп прям в строке соединения), то это бы
решало задачу.
Oracle ConceptsPackaged applications, like report generation tools that only do
queries, can run in Flashback Query mode by using logon triggers . Applications can
run transparently without requiring changes to code .

О, круто! Жаль, что только для Oracle. В моём случае это наименее предпочтительная СУБД :(
...
Рейтинг: 0 / 0
18.09.2014, 20:01
    #38750903
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
> надо вводить периоды актуальности для каждой записи

И периодами актуальности вы не отделаетесь, Кот. Четыре даты - это понятно, но задача хитрее, чем может показаться на первый взгляд.
...
Рейтинг: 0 / 0
18.09.2014, 20:20
    #38750913
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
guest_20040621,

А какой кейс не покроется периодами актуальности для каждой сущности?
...
Рейтинг: 0 / 0
18.09.2014, 20:34
    #38750922
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
Ревизия закрытого периода. А связанные ревизии - локальная задница. :)
...
Рейтинг: 0 / 0
18.09.2014, 20:40
    #38750930
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
SERG1257И решением этой задачи будет восстановление системы с бакапа на определенный момент времени - базовый фунционал любого админа. Никаких изменений в коде (стало быть никаких багов, ни для ретроспективных запросов, ни для боевой программы).
Минусом будет только время на восстановление для большой базы.

Нужен способ спроектировать базу данных так, чтобы задача решалась без бекапа. У бекапа совершенно другие задачи.
...
Рейтинг: 0 / 0
18.09.2014, 20:41
    #38750934
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
prog123Вот оно это путешествие в прошлое

Слабо выставить дату и увидеть совокупное состояние всей системы в этот момент? А не тыкать в каждую запись, выясняя её прошлое.
...
Рейтинг: 0 / 0
18.09.2014, 20:43
    #38750937
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
guest_20040621Ревизия закрытого периода. А связанные ревизии - локальная задница. :)

Ревизии по опыту себя вообще не оправдывают. Неудобная бесполезная нашлёпка. Чем дата/время не ревизия?
...
Рейтинг: 0 / 0
18.09.2014, 20:46
    #38750940
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
> Ревизии по опыту себя вообще не оправдывают.

Вы не готовы к решению этой задачи. Ревизии и представляют основной аналитический интерес.
...
Рейтинг: 0 / 0
18.09.2014, 20:50
    #38750943
prog123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
hVosttprog123Вот оно это путешествие в прошлое

Слабо выставить дату и увидеть совокупное состояние всей системы в этот момент? А не тыкать в каждую запись, выясняя её прошлое.

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

Моя фантазия не идет дальше трёх вкладок: "Вчера" "Сегодня" "Завтра".
Ряд информационных объектов по своей природе постоянны, всевозможные классификаторы, справочники и тому подобное, поэтому над ними время не шибко властно:)
...
Рейтинг: 0 / 0
18.09.2014, 21:17
    #38750960
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
guest_20040621Вы не готовы к решению этой задачи. Ревизии и представляют основной аналитический интерес.

Могу ошибаться, или понятие "ревизия" мы понимаем по-разному.
...
Рейтинг: 0 / 0
18.09.2014, 21:24
    #38750966
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путешествия в прошлое
prog123Нарисуйте (можно от руки) достойный экранный интерфейс и если он придется по вкусу собравшимся, то я его реализую.

Как выглядит экранный интерфейс, не важно :)

prog123Моя фантазия не идет дальше трёх вкладок: "Вчера" "Сегодня" "Завтра".

Допустим, пункт меню "Рестропектива", по нажатию открывается форма ввода даты, указываешь дату, нажимаешь ОК, и программа "в прошлом", за исключением какой-нибудь надписи, обозначающей дату. Все функции доступны, кроме создания или изменения. Также, если программа логгирует просмотры, она должна перестать это делать.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Путешествия в прошлое / 25 сообщений из 121, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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