Как вы клонируете и сравниваете таблицы в NHibernate? - PullRequest
0 голосов
/ 17 июля 2010

У меня есть приложение, в котором я хочу сделать снимок всех объектов, создав клонированные таблицы, которые представляют определенный момент времени.Затем я хочу иметь возможность сравнить различия между этими снимками, чтобы увидеть, как данные меняются со временем.

Как бы вы достигли этого в NHibernate?Кажется, что NH не предназначен для такого типа манипулирования данными, и я не уверен, злоупотребляю ли я своей базой данных, NH или тем и другим.просмотры или сохраненные процы.)

Ответы [ 3 ]

1 голос
/ 18 июля 2010

Вам действительно нужно сохранить все объекты в этом снимке? Если это так, может быть, поможет коллекция таблиц с именами типа type_snapshot. Вы можете сохранить свои объекты в этой таблице (только вставка, но не обновление). Вы можете сохранить исходный идентификатор элемента и создать новый идентификатор для самого снимка. И вы можете сохранить метку времени с каждым снимком. Ваша таблица item_snapshot будет выглядеть примерно так:

id | snapshot_date | item_id | item_prop1 | item_prop2 ...
123 | 7/16/10 | 15 | "item desc" | "item name" ...

В вашем домене, возможно, вы могли бы работать с экземплярами Snapshot (снимок, содержащий идентификатор и дату снимка, а также экземпляр T)

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

0 голосов
/ 20 июля 2010

Мы свернулись, создавая дубликаты таблиц с дополнительным столбцом типа timestamp для снимков.Уменьшил индексы в основной таблице, так как у нас было более 10 миллионов строк, поэтому добавление версий в одну таблицу создаст гораздо больше записей.Также таблицы версий в другом табличном пространстве (файл БД в mssql)

0 голосов
/ 20 июля 2010

Я завершил добавление своих сущностей столбцом идентификатора снимка и скопировал записи в месте в таблице. В сочетании с фильтром я могу выбрать любой снимок. Пришлось сделать несколько патчей для унаследованного кода, но в основном это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...