Подтвердить что ты не робот

ORM медленно? Это имеет значение?

Мне очень нравится ORM по сравнению с процедурой хранения, но я боюсь, что ORM может быть медленным из-за слоев и слоев абстракции. Будет ли использование ORM замедлять мое приложение? Или это имеет значение?

4b9b3361

Ответ 1

Да, это важно. Он использует больше циклов процессора и, следовательно, замедляет ваше приложение. Услышьте меня, хотя...

Но, подумайте: что дороже? Серверное оборудование или другой программист? Серверное оборудование, как правило, дешевле, чем нанять другую команду программистов. Таким образом, хотя ORM может стоить вам процессорных циклов, вам нужно меньше программиста для управления вашими SQL-запросами, что часто приводит к снижению себестоимости.

Чтобы определить, стоит ли вам это, вычислите или определите, сколько часов вы сохранили с помощью ORM. Затем выясните, сколько денег вы потратили на сервер для поддержки ORM. Умножьте часы, которые вы сохранили почасовой ставкой, и сравните их с стоимостью сервера.

Конечно, действительно ли ORM экономит ваше время - это еще одна дискуссия...

Ответ 2

Является ли ORM медленным?

Не по своей сути. Некоторые супертяжелые ORM могут добавить общее перетаскивание к вещам, но мы не говорим о замедлении порядка.

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

ORM - удобный инструмент, но вам нужно понимание более низкого уровня (обычно это связано с написанием SQL-запросов), чтобы пойти с ним.

Это имеет значение?

Если вы в конечном итоге выполняете циклический запрос для каждой из тысяч объектов одновременно, вместо одного быстрого соединения, то, безусловно, это возможно.

Ответ 3

ORM медленнее и добавляет накладные расходы для приложений (если вы специально не знаете, как обойти эти проблемы, что не очень часто встречается). База данных является наиболее важным элементом, и веб-приложения должны быть разработаны вокруг нее.

Многие рамки OOP, использующие Active Record или ORM, разработчики в целом - рассматривают базу данных как несущественную заднюю мысль и склонны рассматривать ее как нечто, чему они действительно не нуждаются в обучении. Но производительность и масштабируемость обычно страдают, поскольку db сильно облагается налогом!

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

Почему разработчики так боятся узнать правильные SQL и настройки, когда это ключ к производительности?

Ответ 4

В проекте Windows Mobile 5 против использования SqlCe я перешел от использования объектов, закодированных вручную, к объектам, сгенерированным кодом (CodeSmith), используя шаблон ORM. При этом во всем моем доступе к данным использовался CSLA в качестве базового слоя.

Прямое преобразование улучшило мою производительность на 32% в локальном тестировании, почти все это стало результатом улучшения методов доступа.

После этого изменения мы скорректировали шаблоны (после просмотра некоторых характеристик производительности SqlCe в PDC от Steve Lasker), и менее чем за 20 минут наш весь уровень данных значительно улучшился, наши средние "медленные" звонки пошли от 460 мс до ~ 20мс. Замечательная часть материала ORM заключается в том, что нам пришлось реализовать (и unit test) эти изменения один раз, и весь код доступа к данным был изменен. Это была потрясающая экономия времени, мы, возможно, спасли 40 часов и более.

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

Я использовал несколько инструментов ORM, и я могу порекомендовать два из них:

Оба они выполнили довольно хорошо, и любая потеря производительности не была заметна.

Ответ 5

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

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

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

Ответ 6

Является ли ORM медленным?

Да (по сравнению с хранимыми процедурами)

Это имеет значение?

Нет (кроме вашего беспокойства - скорость)

Я думаю, что проблема заключается в том, что многие люди думают об ORM как о "трюке" объекта с базами данных, меньше кода или упрощают использование SQL, в то время как на самом деле это... ну объектно-реляционное (DB) - сопоставление.

ORM используется для сохранения ваших объектов в системе управления реляционными базами данных, а не (просто) для замены или упрощения SQL (хотя это тоже хорошо работает)

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

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

Ответ 7

Да, ORM влияют на производительность, независимо от того, что в конечном итоге зависит от специфики вашего проекта.

Программисты часто любят ORM, потому что им нравятся приятные внешние среды cding, такие как Visual Studio, и не нравится кодирование необработанного SQL без intellisense и т.д.

У ORM есть другие ограничения, кроме удара производительности - они также часто не делают то, что вам нужно в 100% случаев, добавляют сложность дополнительного уровня абстракции, который необходимо поддерживать и восстанавливать каждый раз, когда выполняются chhnges, есть также вопросы кэширования, с которыми нужно иметь дело.

Просто мысль - если поставщики баз данных сделают среду программирования SQL такой же приятной, как Visual Studio, и обеспечат более естественную связь между кодом db и интерфейсом, нам не нужны ORM... Я думаю, что в конечном итоге все может пойти в этом направлении.

Ответ 8

Да, ORM замедлит ваше приложение. Насколько зависит от того, насколько далеко идет абстракция, насколько хорошо ваша объектная модель сопоставляется с базой данных и другими факторами. Вопрос должен состоять в том, готовы ли вы потратить больше времени на разработку и использовать прямой доступ к данным или дешевле времени разработки для более медленной производительности во время выполнения.

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

Ответ 9

Я обнаружил, что разница между "слишком медленными" и "не слишком медленными" зависит от того, включен ли ваш кэш 2-го уровня (SessionFactory) ORM. С его помощью он отлично обрабатывается под нагрузкой разработки, но будет раздавить вашу систему под легкой производственной нагрузкой. После включения кеша второго уровня сервер обрабатывал ожидаемую нагрузку и хорошо масштабировался.

Ответ 10

ORM может получить порядок величины медленнее, а не только на grount = s тратить много циклов процессора на него, но также использовать гораздо больше memeory, который затем должен быть GC-d.

Гораздо хуже, что, однако, это не стандарт для ORM (в отличие от SQL), и что мой и большой ORM-S используют SQL, неэффективно, поэтому в конце дня вам все равно придется копаться в SQL для исправления ошибок и каждый раз, когда ORM создает беспорядок, и вы должны его отлаживать. Это означает, что вы ничего не получили.

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

Это фактически делает серверы менее масштабируемыми, что умножает затраты, но эти затраты не упоминаются в начале - немного неудобная правда:-) Когда что-то использует транзакции в 10-100 раз больше, чем оптимально, становится невозможно масштабировать SQL-сторону при все. Говорить о серьезных системах снова не дома/игрушечном/учебном материале.

Ответ 11

Очевидный ответ: зависит от

ORM отлично справляется с изолированием программиста от SQL. Это фактически заменяет посредственные компьютерные запросы для катастрофически плохих запросов, которые может дать программист.

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

Когда они становятся бутылочной горловиной, большинство ORM позволяют вам перешагнуть их и ввести исходный SQL.

Если ваше приложение хорошо подходит к объектам, но не так легко с отношениями, то это все равно может быть победой. Если вместо этого ваше приложение прекрасно подходит к реляционной модели, тогда ORM представляет собой узкое место в кодировании, которое может быть связано с возможным узким местом производительности.

Одна вещь, которую я обнаружил особенно оскорбительной для большинства ORM, - это обработка первичных ключей. Большинство ORM требуют pk для всего, что они касаются, даже если для них нет приемлемого использования. Пример: авторы должны иметь pk, сообщения в блоге ДОЛЖНЫ иметь pk, но ссылки (join table) между авторами и сообщениями не являются.

Ответ 12

ORM всегда будет добавлять некоторые накладные расходы из-за слоев абстракции, но если это плохо спроектированная ORM, которая должна быть минимальной. Время фактического запроса в базу данных будет во много раз больше, чем дополнительные накладные расходы инфраструктуры ORM, если вы делаете это правильно, например, не загружая полный граф объектов, когда это не требуется. Хороший ORM (nHibernate) также даст вам множество вариантов для запросов, выполняемых с базой данных, чтобы вы могли также оптимизировать их по мере необходимости.

Ответ 13

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

Ответ 14

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

Ответ 15

Я никогда не понимал, почему люди думают, что это медленнее или медленнее... получите реальную машину, которую я говорю. У меня были смешанные результаты... Я видел, где время выполнения хранимой процедуры намного медленнее ORM и наоборот. Но в обоих случаях производительность была обусловлена ​​различием в оборудовании.