Падает ли скорость от ORM?

Много раз слышал утверждение о том, что с ORM любая SQL превращается в SQLLite т.е. пропадает возможность использовать кучу фишек самой СУБД. Так ли это? На сколько это сказывается на производительности?
  • Вопрос задан
  • 2647 просмотров
Пригласить эксперта
Ответы на вопрос 6
rdifb0
@rdifb0
Программист, реалист
Да скорость падает, если вы используете повсеместно. Потому что на каждую запись инициализируется жирный класс.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Зависит от ORM. Оверхэд по производительности конечно будет, особенно если брать штукти типа Doctrine с гидрациями и т.д. Но тот профит в плане времени разработки и качества продукта которые они дают слихвой окупают все издержки. Если проект становится популярным и +30% это лишняя стойка серверов, то есть платить за сервера уже становится дороже чем за разработчика, тут уже имеет смысл рефакторить и оптимизировать узкие места. Но преждевременные оптимизации - зло.

Что до SQL и возможностей СУБД - Doctrine и многие другие позволяют вам использовать как нативные запросы (+ свои гидрации) так и добавлять какие-то свои функции для *QL. Так же многие вещи можно порядочно ускорить (в доктрине самым узким местом является unit-of-work а точнее вычисление дифа данных которые там крутятся. По умолчанию там все сравнивается в лоб, типа дерти чекинг, но можно установить свою реализацию для своих сущностей если вы этого захотите).
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
нет не превращается в sqllite
можно использовать переносимые фичи
скорость падает так как орм не умеет гладко переводить ваши сложные запросы в оптимальные для субд
+ многие запросы просто нельзя реализовать в субд
+ фичи свойственные только для данной субд в орме не заюзаешь
Ответ написан
DigitalSmile
@DigitalSmile
http://brainstorage.me/digitalsmile
Как и любой код, ORM несет в себе логику. Выполнение этой логики кушает память и процессорное время. Невыполнение - нет (всегда Ваш, КО).
Вопрос в другом - а напишите ли вы те задачи, для которых собираетесь использовать ORM, также оптимально, как написано в известных ORM? Может быть и ORM не нужна в таком случае и Вы можете обойтись прямым общением с драйвером СУБД (раз засомневались в целесообразности использования).

И тут правильно отмечают, современные ORM могут достаточно тонко настраиваться, так что, если у Вас крупный проект, такие библиотеки Вам здорово помогут.
Ответ написан
Комментировать
riky
@riky
Laravel
Падает ли скорость от ORM?

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

Падает ли скорость от ORM?

нет. скорость разработки может сильно возрасти, если уметь с ней работать.

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

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

хорошая орм не связывает руки а имеет возможности для тонкой работы на более низком уровне.

я использую пару лет doctrine2 для php, хотя до этого много лет писал запросы руками. возвращаться не хочу, хотя и могу.
Ответ написан
Комментировать
alex1t
@alex1t
.net developer
Конечно падает. Но всё зависит от ORM.
Если производительность важна, то лучшим решением будет использование microORM, например Dapper или PetaPOCO. По сути они лишь позволяют выполнять запросы и быстро маппить объекты. Dapper в этом хорош. Сайт StackOverflow полностью на нём работает. Но в этом случае нет плюшек "больших" ORM вроде поддержки состояния и LINQ-to-SQL.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы