2009-05-23 2 views
3

Я собираюсь взад и вперед между использованием nHibernate и вручную написанных процедур ado.net/stored.Сравнение рукописных ADO/Sprocs с nHibernate

В настоящее время я использую codemith с шаблонами, которые я написал, которые выплевывают простые классы, которые отображают мои таблицы базы данных, и он обертывает мои хранимые процедуры для моего уровня данных и тонкий слой бизнес-логики, который просто вызывает мой уровень данных и возвращает объекты (1 объект или коллекция).

Это приложение представляет собой веб-приложение, используемое для онлайн-сообществ (в основном форум).

Я смотрю лето nhibernate видео прямо сейчас.

Будет ли использование nHibernate облегчить мою жизнь? Будет ли легче обновляться схема базы данных? Какие эффекты будут влиять на производительность?

Устанавливает nhibernate и обеспечивает оптимальную работу головной боли?

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

ответ

2

NHibernate работает очень хорошо, особенно для простой модели. Это сделает вашу жизнь намного легче и не слишком сложно учиться. Посмотрите на «Fluent NHibernate» вместо использования XML-сопоставлений, это намного проще.

+0

Согласовано, сопоставление атрибутов объектов намного проще, чем отображение XML. Единственный раз, когда вы когда-либо должны были отображать XML, - это если ваши объекты данных не ограничены или скомпилированы. – Soviut

+0

Errr ... Fluent NHIbernate не является отображением атрибутов. wiki.fluentnhibernate.org – jfar

4

NHibernate может определенно сделать вашу жизнь проще. Обновления вашей схемы базы данных, безусловно, будут проще, потому что, когда вы используете ORM, у вас нет API хранимых процедур, препятствующих реорганизации вашей схемы базы данных, чтобы соответствовать изменениям в вашей бизнес-модели.

OR mappers имеют LOT, которые предлагаются, и их грустно неправильно понимают значительная часть сообщества разработчиков и почти все сообщество DBA.

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

Еще одно серьезное заблуждение (и это в основном из лагеря SQL Server ... У меня очень мало опыта работы с Oracle) заключается в том, что хранимые процедуры - это единственное, что может быть скомпилировано и план выполнения кэширован. Что касается SQL Server, любой параметризованный запрос может и, вероятно, будет скомпилирован и кэширован.

Преимущества OR-карт в том, что они адаптивны ... с хранимой процедурой, вы пишете один оператор, который будет использоваться независимо от контекстуальных нюансов при выполнении этого запроса. LINQ to SQL обладает потрясающей способностью генерировать наиболее эффективные запросы, которые я когда-либо видел, и часто бросает DBA на серьезный цикл. Я показал запросы DBA, созданные L2S, которые были полны подзапросов и нетрадиционных вещей, которые были немедленно издевались. Однако, учитывая эту проблему, производительность (а именно физическое чтение) запроса, написанного администратором баз данных, который предположительно превосходил, оказался значительно ниже (иногда в масштабе 30 физических чтений для L2S и 400 физических чтений для администратора баз данных.)

Другим критиком в отношении DBA является то, что, поскольку ORM генерирует динамический SQL, у них нет возможности оптимизировать эти запросы. Напротив (и, опять же, это ограничивается SQL Server), SQL Server предлагает множество путей оптимизации (горизонтальное и вертикальное разбиение таблиц, распределение физических файлов по дискам для любой таблицы или представления, индексы и т. Д.), Которые могут быть сделанный до необходимости изменения запроса, является необходимостью. Даже в том случае, если запрос необходимо изменить, SQL Server 2005 и более поздние версии предоставляют что-то, называемое Plan Guides, которое позволяет вам умеренно настраивать любой запрос (хранимый proc, пролив sql и т. Д.). В случае, если настройка запроса недостаточно, вы можете сопоставить любой конкретный запрос с полным запросом на замену, позволяя администратору баз данных настраивать запрос столько, сколько ему нужно (но в крайнем случае.)

это много, много преимуществ, которые можно получить с помощью OR-сопоставления, а NHibernate - один из лучших бесплатных (LLBLGen тоже очень приятный, но не бесплатный). LINQ to Sql и Entity Framework - это новые предложения от Microsoft (L2S вскоре будет заменен EF 4.0 из платформы .NET 4.0 ... который, по крайней мере, будет соперником, если не outpace, NHibernate.) Самым большим препятствием для принятия ORM обычно не является сам продукт ORM, а также его возможности или представление. Наибольшее препятствие обычно убеждает ваш администратор баз данных (если ваш счастливый/неудачный ... зависит от вашего опыта ... иметь его), ORM может повысить эффективность и снизить затраты на обслуживание без затрат на пути оптимизации для администратора баз данных.

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