powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Непротиворечивость вторичных данных
11 сообщений из 11, страница 1 из 1
Непротиворечивость вторичных данных
    #36077139
ABN69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, как в СУБД можно решить такую задачу:

Есть некоторые данные {X} (сложные, в нескольких таблицах), на основании этих данных проводятся вычисления, результат которых {Y} записывается в БД. Вычисления могут проводиться в разное время и дополнять множество {Y}. Через некоторое время значения {X} изменяются пользователем. Как определить, что {Y} уже не соответствует исходному набору данных {X}?

С уважением,

ABN69
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36077216
Michael_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ABN69, можно
1) организовать все вычисления с помощью триггеров так, чтобы результаты пересчитывались при изменении первичных данных
2) оформить рассчеты в виде View/вычисляемых полей
И то и другое решает проблему автоматически.

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

Может, спецы по DWH что-то еще подскажут...
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36077256
ABN69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael_N, спасибо за быстрый ответ,

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

С триггерами связываться тоже не очень хочется, поскольку в {X} может быть до 100 тысяч записей, есть ощущение, что тормоза будут ощутимые.

А нет ли других механизмов? Задача, по ощущениям, трудоемкая, где искать эффективное решение (хотя бы теоретически) - непонятно.

А.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36077478
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет ли других механизмов?Т.е. пересчитать не пересчитывая ?
Других нет.
Либо проверяйте на лету (триггер, ХП)
Либо проверяйте пакетом раз в сутки/неделю/месяц
Либо оставьте как есть пока все не поломалось. Чем не вариант ?
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36077506
ABN69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV, всем большое спасибо, ситуация прояснилась, вопрос снимаю.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36077785
Фотография А6дуллаh3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, кому то будет полезно, как может быть устроено это в вычислительных движках.
Каждое вычисление состоит из стадий. Каждая стадия имеет входные данные и результаты.
Для того, чтобы иметь историю, на основании каких входных данных посчитан тот или иной результат, нужно вместе (или рядом) с ним хранить эту информацию.
Например, историзируем входные наборы суррогатным ключом и датой актуальности.
Далее при вычислении в отдельное поле результата (или рядом, по ER-связи) сохраняется суррогатный ключ использованного входного набора. И так для каждой стадии.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36079060
ABN69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А6дуллаh3, спасибо, что поддержали разговор,

Относительно ключей - идея хорошая, но есть ощущение, что с ними будет не очень удобно работать, т.к. в теле функции расчета придется указывать те значения, которые входят в {X}. Кроме того, при большом количестве аргументов (>10**5), время сканирования списка ключей может стать слишком большим.

Более эффективным (при больших Nx) мне представляется подход, основанный на построении некоторой функции проверки НП. Поскольку алгоритм проверки в "наших руках", можно найти несколько простых признаков, по которым можно проверять сложные данные. Например, если есть длинный список элементов, то прежде чем проверять его состав, можно проверить количество элементов в списке или факты добавления-удаления элементов из списка. При N > 10**3 можно получить весьма ощутимое ускорение. В первую очередь следует проверять аргументы, частота изменения которых максимальна (больше вероятность наткнуться на условие нарушения НП), и т.п.

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

С уважением,

А.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36083861
Alexey Mugalev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант, вести лог изменений в исходных данных и запускать расчет либо по расписанию, либо по факту изменения исходных данных. Расчет должен запускаться джобом, чтобы сессия, запустившая его, не ждала окончания.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36085074
ABN69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Mugalev,

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

Для определения подмножества, образующего ИД задачи на текущий момент времени, формируется специальный запрос (аналог запроса, формируемого при вычислениях), сравниваются временные метки X-параметров с временной меткой результата. При обнаружении данных с tx > ty результаты расчета сбрасываются.

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

Этот вариант всех устраивал, до тех пор пока не возникла необходимость существенно усложнить структуру ИД и увеличить их объем. Теперь задумались над возможными путями оптимизации, поскольку есть опасения, что время проверки НП будет слишком большим.

Устав от долгих раздумий, и отчаившись найти простое и эффективное решение, у нас возникли сомнения относительно правильности постановки задачи. М.б. и не надо контролировать НП?

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

Обычно, при анализе результатов расчета у пользователя возникает желание что-то изменить в объекте, а у него на экране вчерашняя версия, у которой вместо колес гусеницы...:-). Да и какая польза от вчерашних результатов - только если захочется что-то приятное вспомнить...:-).

Так что, поиски решения пока продолжаются, видимо, нарушать законы проектирования БД и платить за это контролем НП, все таки придется, вопрос - как?

ЗЫ: Мне кажется, аналогичная ситуация возникает при генерации отчетов. Они же формируются на данный момент времени, и, ЕСНО, могут устаревать. Но вряд ли кому то придет в голову проверять актуальность отчета сравнением состояний БД - проще сгенерировать новый. В конце концов, можно сравнить результаты отчетов.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36085102
Фотография А6дуллаh3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня запутал первый пост.
Если задача обратная - т.е. актуализировать расчет при изменении во входных данных - то читайте про CDC. Для разных СУБД существует по несколько технологий, позволяющих отслеживать изменения и реагировать на них.
Это проработано вплоть до наличия на рынке тиражного ПО. Например, в Oracle Data Integrator многое в исходниках. Смотреть JKM.
...
Рейтинг: 0 / 0
Непротиворечивость вторичных данных
    #36085126
ABN69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А6дуллаh3,

Огромное спасибо за подсказку, буду изучать,
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Непротиворечивость вторичных данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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