Можно ли использовать Nhibernate с разбиением объекта на несколько таблиц? - PullRequest
0 голосов
/ 20 февраля 2012

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

После обсуждения использования SQL Enterprise (ОЧЕНЬ дорого и полно ловушек, так как мы не получили ноу-хау) и с тех пор, как наша системаИмея так много таблиц, которые ссылаются друг на друга, мы склоняемся к созданию каких-то хронологических таблиц, в которые мы ежемесячно перемещаем данные и переписываем выбранные нами запросы на основе параметров для поиска либо в обычной таблице, либо в истории, либои то и другое в зависимости от ситуации.

Поскольку мы также используем NHibernate для отображения, мне было интересно, возможно ли создать файл отображения, который обрабатывает это сам (почти), используя своего рода полиморфизм или наследование, в котором каждыйобъект хранится в разных таблицах на основе параметров?

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

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Краткий ответ "нет".Я бы не стал создавать представления, поскольку вы упоминаете о большом количестве присоединений.

Лично я бы создал сводные таблицы и сопоставил бы их непосредственно, используя сеанс без сохранения состояния или, по крайней мере, mutable=false в определении класса.Думайте об этих сводных таблицах как о денормализованных данных только для отчета.Единственным недостатком является то, что если исторические данные изменяются на регулярной основе, то сводные таблицы также нуждаются в изменении.Если исторические данные никогда не меняются, то это должно быть легко достигнуто.

Я бы также, скорее всего, сохранил бы эти сводные таблицы в другом каталоге, а не увеличил бы размер текущей системы.

Это не такя боюсь, это быстрый выигрыш.

0 голосов
/ 20 февраля 2012

Насколько я знаю, NHibernate не может этого сделать (каждый класс может быть сопоставлен с одной таблицей / представлением), но вы можете использовать SQL-запросы или StoredProcedures (зависит от используемой версии NHibernate) для заполнения отображаемых объектов. , В вашем случае вы можете создать комбинированное представление, создавая объединения из разных таблиц. Затем вы можете использовать SQL-запрос для заполнения вашей сущности. Существует также другое решение, в котором вы создаете объект сводки для своих запросов, который использует это представление, поэтому вы можете использовать как HQL, так и критерии для запроса этого объекта.

...