2011-01-21 4 views
1

Не могли бы вы поделиться своим опытом с генерацией схемы NHibernate? Насколько масштабируемо это с точки зрения сложности и размера модели данных? Имеет ли он какие-либо существенные последствия по сравнению с ручной моделью данных?Генерация схемы NHibernate

+1

Вы говорите конкретно о создании схемы базы данных из определений классов? В сравнении с созданием схемы базы данных вручную в соответствии с определениями классов? Если это так, это, вероятно, 80% -е решение и довольно близко к тому, что вам нужно для первого выпуска. После первого выпуска продукции вам нужно подумать о миграциях, которые на самом деле не генерируют схема. –

+0

Да, Michale, я имею в виду создание db-схемы из определений классов. Приятно знать, что это очень близко к потребностям версии 1, я думаю, что это сэкономит много времени. Спасибо. – patelsan

ответ

2

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

FWIW, мы использовали генерацию схемы NH с примерно 30 образцами обычных типов (включая таблицу для каждого подкласса), а определения, которые она генерирует, являются правильными, поэтому нет очевидного предела размеру схемы что он может справиться.

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

0

Вы сравниваете Яблоки и Груши. Модель с ручной обработкой всегда (хорошо должна) вне любой технологии ORM.

Я лично считаю, что NHibernate хорошо работает и отобразит практически любую модель OO в реляционную модель, вот в чем ее красота. Есть несколько способов получить информацию о времени запуска приложения и убедиться, что вы правильно используете управление сеансом.

Я бы порекомендовал NHibernate и использовал его в течение 18 месяцев на схемах, которые занимают около 80 таблиц, и еще не видели серьезных проблем.

+0

Приятно знать, что он хорошо работает для 80 столов и 18 месяцев. Я знаю, что созданные вручную модели БД будут лучше, вот почему я упомянул, есть ли какие-либо «существенные последствия для производительности». – patelsan

0

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

Настройка производительности обычно выполняется после автоматического создания схемы. Например, вы позволяете NH создавать таблицы и запускать несколько операторов Alter Table, чтобы установить некоторые параметры, относящиеся к производительности. Также очень легко создавать (или заменять) индексы впоследствии. Все это может быть даже записано в файлы сопоставления. Трудная работа по-прежнему выполняется NH: создание всех таблиц и столбцов в соответствии с уже имеющейся информацией: файлы сопоставления.

1

Если вам нужно экспортировать свою схему и заполнить базу данных, вы хотели бы увидеть инструмент Schema Fluent NHibernate. Он способен читать ваши сборки, hibernate.cfg.xml, * .hbm.xml и Fluent Mappings. Вы можете создавать/выполнять DDL вашей базы данных (создавать/обновлять/удалять таблицы) и принимать CSV-подобный входной файл, который будет использоваться для заполнения созданной/обновленной базы данных (файл набора данных принимает небольшие запросы, которые должны выполняться в HQL) , Этот инструмент очень полезен для модульного тестирования и веб-приложений, использующих NHibernate.

Подробнее: https://bitbucket.org/guibv/fnst/wiki/Home.

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