2010-07-17 2 views
0

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

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

(P.S. Из-за ограничения базы данных двигателя я не может использовать представление и хранимые проки.)

ответ

0

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

1

вам действительно нужно, чтобы сохранить полноту каждого объекта в этом снимке ли? Если это так, возможно, коллекция таблиц с такими именами, как 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

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

Смежные вопросы