2010-03-03 2 views
3

Разработчики иногда сталкиваются с многоуровневыми веб-приложениями Enterprise ... «Предприятие» рассматривается некоторыми как синонимом медленного, раздутого и ресурсоемкого.Сколько накладных расходов делают такие платформы, как Hibernate?

Действительно ли фреймворки, такие как Hibernate, приносят незначительное влияние на производительность по сравнению с написанием собственных DAO или других менее абстрактных подходов? По нетривиальному, я полагаю, что вопрос заключается в том, «что пользователь в последнее время загружает страницы медленнее».

+0

Катание на коньках близко к краю субъективности здесь ;-) Я постараюсь перефразировать. –

+1

Почему это субъективно? Люди могут обсуждать метрики или точно, какие дополнительные рамки кода представляют. –

+0

scathing of? ... – rogerdpack

ответ

6

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

PS Не забудьте использовать надлежащие инструменты с Hibernate, например Hibernate profiler. Они могут творить чудеса!

PPS Использование Hibernate не является заменой для знания вашего SQL!

0

Это зависит от того, что вы делаете. Как правило, пользователи не заметят разницы на переднем конце, но есть несколько вещей, чтобы не упустить:

  • ОРМ картографами не велики при выполнении пакетных обновлений или обработки больших наборов данных.

  • Если у вас есть сложный набор отношений, ваш ORM-картограф может замедлить работу, потому что он соединяется с «неправильным» способом. Или извлекает слишком много данных.

  • Если ваш сайт имеет действительно большую нагрузку, дополнительные циклы ЦП могут мешать, но это маловероятно.

ORM mapper может сделать ваше программное обеспечение намного проще в разработке. Следите за производительностью и делайте 1% вещей в прямом SQL, но сохраняйте Hibernate в других 99% вещей.

1

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

Не уверен, если вы спросите об этом, потому что есть требование приложения, в котором говорится, что производительность важна или вам просто интересно, но подумайте об этом: были некоторые люди, которые использовали Hibernate в приложении и заметили, что это sloooow. Затем некоторые ребята реорганизовали его, оптимизировали его, используя простой JDBC, iBatis или что-то еще, и он запускал faaaaast. Итак, вывод был: Hibernate медленный.

Но они не считают, что технология была использована неправильно. Да ... здорово, что вы можете написать object.getX().getZ().getW().getSomeOtherThing().getEtc(), и он просто работает, но Hibernate будет генерировать SQL и Heaven, чтобы помочь вам там.

Прежде чем делать что-либо, рассмотрим правила оптимизации:

  • Первое правило оптимизации - Не делайте его.
  • Второе правило оптимизации (для экспертов) - Не делайте этого ... пока.

Добавление рамки обычно хорошо, потому что оно облегчает развитие. Если он добавляет накладные расходы? Ну ... ты не можешь сказать, просто посмотрев на него. Вы должны просмотреть его и проверить.

+0

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

+0

"вы не можете сказать, просто посмотрев на него. Вам нужно профайл и проверить его" ... да, это вопрос этого вопроса, я полагал, что кто-то уже мог это сделать :) –

+1

Если ваша пользовательская база взрывается будет ли это иметь значение, если вы используете Hibernate, какую-то другую структуру или если она является обычным? Первое, что вы делаете, когда у вас проблемы с производительностью, - это ускорить работу с ним. Если это не помогает, вы начинаете думать, что менять в программном обеспечении. Если я переключусь с MySQL на Postgres, это поможет? Как насчет Oracle? Должен ли я начинать срывать программное обеспечение, чтобы получить максимальную отдачу от него и т. Д. Поэтому в основном вы возвращаетесь к перепроектированию вещи (если вы не разработали ее для этой цели с первого дня - это то, что вы пытаетесь сделать?). – 2010-03-03 10:43:56

1

По нетривиальному вопросу я предполагаю, что вопрос заключается в том, что пользователь в последнее время загружает страницы медленнее.

Для большинства применений CRUD это наоборот. Правильно используемое и настроенное, Hibernate будет генерировать лучший SQL, чем большинство разработчиков (извините, но это правда) и такие функции, как ленивая загрузка, кеширование первого уровня (кеш уровня транзакции), кэширование второго уровня (кеш глобального уровня), запрос кэширование сделает его лучше, чем подходы более низкого уровня (пользовательские SQL и DAO).

И поскольку кто-то упомянул пакетные обновления и большие результирующие наборы, я хотел бы подчеркнуть, что Hibernate имеет StatelessSession для этих случаев использования. Но я не думаю, что они входят в сферу интерактивной части webapp (если ваш поиск извлекает 10-дюймовые записи в webapp, вы делаете это неправильно).

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