powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Путешествия в прошлое
25 сообщений из 121, страница 2 из 5
Путешествия в прошлое
    #38750969
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, пока вижу решение на основе исторических записей (копий) и сохранении периодов актуальности. Стоит ли бросаться "в омут" с таким решением, или у кого-то есть ещё предложения?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38750991
VerVit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вспомнил такое в 1с версия 7.7

В справочниках у реквизитов есть свойство Периодический, у системы есть свойство РабочаяДата. Можно выбрать любую дату и заполнять или смотреть информацию на эту дату.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751007
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Стоит ли бросаться "в омут" с таким решением, или у кого-то есть ещё предложения? Вам надо будет принять несколько решений основываясь на
1 Это доделка существующей (смотрящей в настоящее) системы или сразу новая разработка
2 Как часто будут запросы в прошлое. Насколько критична производительность по сравнению с запросами "на настоящее время".
3 Какой объем устаревших версий строк по сравнению с общим объемом данных?

Решения которые надо принять -
1 хранить версии в той же таблице myTable (проще и быстрее)
или в другой myTable_hist (нет влияния на запросы к "живым данным", все ключи/ограничения работают, но выборка исторических данных сложнее и медленнее)
2 использовать две даты d_from default(до начала времен), d_to default(конец времен)
или одну дату d_change (надежнее, но медленнее выборки)
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751036
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257,

Спасибо за подробный ответ. Это не доделка. Есть работающая версия 1 (но без ретроспективы). Надо делать версию 2 практически с нуля, но с оглядкой на 1 (т.е. бизнес-процессы, данные -- те же).

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

Объём устаревших версий большой, наверное надо будет предусмотреть чистку, или сжатие (т.е. частые изменения со временем надо будет упаковывать в большие, пока даже не знаю как мы это будем делать).

Придётся хранить версии в отдельных таблицах, так как к "живым" данным по перфомансу предъявляются высокие требования.

Да, две даты, надёжность обеспечивается слоем доступа к данным.

Что ж, будем делать. Спасибо за просвещение!
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751040
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПридётся хранить версии в отдельных таблицах, так как к "живым" данным по
перфомансу предъявляются высокие требования.
Одно с другим связано слабо. Архивную аналитику выносят в отдельную базу по другим причинам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751050
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Да, две даты, надёжность обеспечивается слоем доступа к данным.
Добавьте в расписание запрос на предмет поиска строк у которых дата конца не совпадает с датой начала при том же ай-ди. В нормальных условиях запрос не должен возвращать данные, ну а если кто накосячил то отловите вы, а не пользователь.
Я к тому что верить никому нельзя.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751055
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОдно с другим связано слабо. Архивную аналитику выносят в отдельную базу по другим причинам.

Предлагаете хранить историю в одной таблице?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751056
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Добавьте в расписание запрос на предмет поиска строк у которых дата конца не совпадает с датой начала при том же ай-ди. В нормальных условиях запрос не должен возвращать данные, ну а если кто накосячил то отловите вы, а не пользователь.
Я к тому что верить никому нельзя.

Благодарю за совет!
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751057
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Путешествия в прошлое планируются не частые, производительность в режиме ретроспективы не критична

Тогда вы фигней занимаетесь. Держите нужное количество архивных копий, это будет на порядки дешевле редизайна и поддержки.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751066
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 Тогда вы фигней занимаетесь. Держите нужное количество архивных копий, это будет на порядки дешевле редизайна и поддержки. Заглянув в хрустальный шар, предположу что hVostt - разработчик и проблему решает как разработчик.

когда в руках молоток, все проблемы выглядят как гвозди. (с)
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751068
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> проблему решает как разработчик

Так я и пишу для того, чтобы люди не ходили по граблям. Это наиболее серьёзная задача из всех, когда-либо здесь обсуждавшихся. Более того, о решениях промышленного качества я не слышал и не читал.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751096
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТакже, если программа логгирует просмотры, она должна перестать это делать.
Эт-то почему же? :)
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751118
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> проблему решает как разработчик

Так я и пишу для того, чтобы люди не ходили по граблям. Это наиболее серьёзная задача из всех, когда-либо здесь обсуждавшихся. Более того, о решениях промышленного качества я не слышал и не читал .

А вы не потрудитесь вкратце сформулировать своё видение проблемы?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751258
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос сформулирован некорректно. Все элементы в БД в любой момент времени должны находиться в согласованном состоянии. Так что в общем случае при ведении истории для ВСЕЙ БД нужно при любом изменении любой сущности делать копию всех остальных связанных сущностей. Соответственно, решение ужасно затратное как по дисковому пространству, так и по производительности.

Для начала, чем не устраивает решение иметь таблицу истории для каждой сущности отдельно и делать, как уже упоминалось выше по топику, на каждый делете/апдейт копирование удаленных записей в триггере в историческую таблицу? В принципе, это решение позволит иметь снепшот данных на любой время: нужно просто выбирать из исторических таблиц самые близкие записи к указанному времени, а если их нет - брать значения из актуальных таблиц.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751279
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы посмотрите как реализован механизм Capture Data Source (СDS) в MS SQL 2008 и позднее.
там именно история изменений значений атрибутов.
заводиться альтернативная таблица и заполняется значениями полей таблицы с историей.
что-то можно попробовать сделать на их архитектуре - там здоровенная система наворочена
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751284
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Для начала, чем не устраивает решение иметь таблицу истории для каждой сущности отдельно и делать, как уже упоминалось выше по топику, на каждый делете/апдейт копирование удаленных записей в триггере в историческую таблицу? В принципе, это решение позволит иметь снепшот данных на любой время: нужно просто выбирать из исторических таблиц самые близкие записи к указанному времени, а если их нет - брать значения из актуальных таблиц.
Это означает, грубо говоря, держать две копии всех запросов - "с историческими таблицами" и "без исторических таблиц", поскольку вариативность во FROM поддерживается достаточно плохо.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751287
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИнтересует, доводилось ли кому-нибудь проектировать базу данных таким образом, чтобы в программе можно было выбрать дату и посмотреть полное состояние всей системы на это время без артефактов, естественно без возможностей изменения данных? Как будто был произведён откат, но без использования отката, т.е. на уровне данных.

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

суть:
* помимо основной таблицы сущности, нужна еще таблица исторических сведений, либо одна таблица и для каждой сущности сквозной ИД + ИД редакции + дата актуальности
* с датой актуальности несколько вариантов, гугль подскажет подробное описание, там есть плюсы и минусы у каждого
* связи идут по сквозному ИД, а конкретная редакция сведений достается по результатам расчета текущей даты актуальности -вот тут и требуется оптимизация запросов
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751295
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинArm79Для начала, чем не устраивает решение иметь таблицу истории для каждой сущности отдельно и делать, как уже упоминалось выше по топику, на каждый делете/апдейт копирование удаленных записей в триггере в историческую таблицу? В принципе, это решение позволит иметь снепшот данных на любой время: нужно просто выбирать из исторических таблиц самые близкие записи к указанному времени, а если их нет - брать значения из актуальных таблиц.
Это означает, грубо говоря, держать две копии всех запросов - "с историческими таблицами" и "без исторических таблиц", поскольку вариативность во FROM поддерживается достаточно плохо.

Да ну, не все так плохо.
select top 1 from (select from history union select from source) t where t.last_update >= @date order by date desc
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751296
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я помню, что в книге http://www.ozon.ru/context/detail/id/2808650/ в одной из последних глав рассматривается теория - как спроектировать БД с возможностью ретроспективы и есть примеры на Cache. Почитайте, если найдете, может, увидите что-то для себя полезное.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751307
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Кот Матроскинпропущено...

Это означает, грубо говоря, держать две копии всех запросов - "с историческими таблицами" и "без исторических таблиц", поскольку вариативность во FROM поддерживается достаточно плохо.

Да ну, не все так плохо.
select top 1 from (select from history union select from source) t where t.last_update >= @date order by date desc

Смысл тогда разделять на 2 таблицы, если в каждом запросе делать union?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751333
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему все говорят только о данных?

В БД куча других объектов, в том числе и реализующих прикладную логику.
Иногда при доработках вообще меняются алгоритмы расчета тех или иных величин, то есть на одних и тех же исходных данных, лежащих в таблице вчера выдавалось одно расчитываемое значение, а сегодня выдаётся другое.

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

Это касается не только уровня пакетов в БД. Это же касается и самой БД, ибо сама СУБД тоже дорабатывается и при очередных релизах бывает меняется какое-то поведение.

А еще логика бывает не только в БД зашита, а еще и в клиентском ПО, то есть надо еще и клиентское ПО брать соответствующей версии, чтобы увидеть в точности то, что вывидели "вчера".
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751335
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Путешествия в прошлое планируются не частые, производительность в режиме ретроспективы не критична

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

Ну хорошо, давайте рассмотрим такой вариант. В приложении есть кнопка "Ретроспектива". Как решить задачу по нажатию на кнопку? Где-то в подвале загорается красная лампочка и бригада админов начинает интенсивно шевелиться?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751339
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Заглянув в хрустальный шар, предположу что hVostt - разработчик и проблему решает как разработчик.

когда в руках молоток, все проблемы выглядят как гвозди. (с)

Именно. А как ещё можно решать эту задачу?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751342
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойhVosttТакже, если программа логгирует просмотры, она должна перестать это делать.
Эт-то почему же? :)

Нет нужды для ретроспективы.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38751343
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Вопрос сформулирован некорректно. Все элементы в БД в любой момент времени должны находиться в согласованном состоянии. Так что в общем случае при ведении истории для ВСЕЙ БД нужно при любом изменении любой сущности делать копию всех остальных связанных сущностей. Соответственно, решение ужасно затратное как по дисковому пространству, так и по производительности.

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

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


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