Сведения о вопросе

FELL

21:06, 1st October, 2020

Модель базы данных с историей изменений?

Просмотров: 311   Ответов: 6

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



  Сведения об ответе

DINO

04:12, 27th August, 2020

Ну что касается вообще хранения данных с историей в хранилищах, то можно начать со Slowly changing dimensions: wiki, соответственно, любая книжка по ХД будет содержать инфу по теме и, наверное, какой-нибудь из типов подойдёт.


  Сведения об ответе

lats

07:21, 4th August, 2020

а не проще сохранять сделанные изменения в отдельную базу истории?


  Сведения об ответе

lourence

21:49, 12th August, 2020

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


  Сведения об ответе

DO__IT

12:11, 10th August, 2020

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

Далее у нас остается только сущность (для простоты пусть будет одна и простая) и она может изменяться. Мы можем выбрать хранить копии или только изменения и при запросы вычислять нужное состояние.

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

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

Самый простой сценарий. Взять последнюю версию сущности А, изменить и сохранить:
1) обращаемся к слою сервиса (ничего не знает о версиях) с запросом взять сущность А,
2) слой данных запрашивает сущность А и добавляет к запросу пункт о последней версии,
3) получает сущность и отдает сервису, который отдает её нам,
4) изменяем сущность и просим слой сервиса сохранить её,
5) слой данных помечает новую версию как последнюю, а со старой этот статус снимается.
6) сохраняются две сущности, но для нас это будет выглядеть как одна сущность, т.к. мы будем оперировать только одной сущностью.


  Сведения об ответе

ITSME

05:11, 27th August, 2020

CauchDB может быть подойдет. Она как раз хранит все изменения данные. К предыдущим значениям можно обращатся по номеру версии.


  Сведения об ответе

COOL

04:36, 20th August, 2020

текстовые атрибуты как раз не проблема — смотрите в сторону DVCS там их быстро и компактно хранят diff-ами.
С прочими намного сложнее в плане компактности — приходиться хранить целиком.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться