Pull to refresh

Comments 18

  • Они эффективно обрабатывают отношения между таблицами, автоматически загружая связанные элементы при извлечении записей с отношениями 1:m, избавляя от необходимости выполнять дополнительные запросы вручную.

Они скорее неэффективно создают связывающие запросы выполняя зачастую ненужные дополнительные запросы автоматически под капотом так, что у DBA потом волосы дыбом.

В Eloquent, н-р, это регулируется. Написал ->with('relation:id,name') - загрузил отношение, можно даже поля выбрать, какие надо. С доктриной печальней.

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

Почему-то подумалось, что в статье речь пойдет про агрегаты.

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

Никак нет. Вы в большинстве. Но когда идет разговор про стоимость часа разработки, то вспоминают про ОРМ - они же в CRUD себя неплохо показывают? А что будет, когда логика перестает быть CRUD? На этом моменте всем не важно, главное стоимость часа, и время.
ОРМ это скорее плохо. Но если вы пишете записную книжку, или что-то документ-ориентированное - ОРМ вам помощник.

P.S. И еще ОРМ снижает ФЗП. Зачем платить разработчику со знанием SQL, когда можно взять разработчика без знания SQL?

Брать человека не знающего SQL, для работы с БД - это уровень фразы "просчитался, но где".) Большинство ORM по умолчанию даже нормальное индексирование не делают, о чём человек, не знающий SQL знать не будет, как и банально не сможет написать специфический функционал.)

Очень интересно, что вы имеете в виду под "нормальным индексированием"

Индексы на foreign key? Питоновский ORM django делает.

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

Вы какую-то чушь здесь написали. ORM, который "не требует знания SQL" - это тот самый CRUD на 4 запроса. Людей, которые занимаются веб-программированием не зная SQL на этом уровне, можно себе представить только в полемических фантазиях.

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

Не всегда. Это примерно как Rust vs Assembly. В теории (и на практике) можно написать Low-Level код, который бы работал быстрее и эффективнее ORM, однако на практике же при масштабировании без наличия UoW, Identity Map (IM), всяких ленивых "where in" отношений и прочего можно запросто получить большую мусорку, особенно когда общение начинается между разными контекстами через какую-нибудь шину и одна часть системы, реагирующая на какое-то событие/команду не знает ничего о другой.

Ну, например, аутентификационная инфраструктура дёргает юзера, а потом где-то в апп сервисе он же дёргается через репозиторий уже. Без IM получим лишний запрос сразу (а то и несколько, если юзер тянет за собой ещё что-то).

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

Нет, не в меньшинстве.)

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

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

90% кода типичного веб-приложения и так не вызывает никаких проблем с производительностью. Получить запись по первичному ключу. Получить полсотни записей простым джойном. Такого рода операции либо вообще не требуют никакой "оптимизации", либо прекрасно оптимизируются средствами ORM. Но при этом объём и время написания кода сокращаются в разы.

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

Да конечно, если работает нормально и в нужном бюджете - абсолютно все равно.

А что разработчики вообще разучились в pdo и хотя бы middle уровень sql запросов?

Да уж, скоро no-code во всей красе выплюнется

Статья - редкая халтура.

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

Ещё статья до боли напоминает индусский спам, который одно время потоком шёл на Реддите, буквально по 2-3 поста в неделю: как выбрать фреймворк, как выбрать ORM, как выбрать язык... При этом отличительные особенности каждого из продуктов берутся от балды, без какой-либо системы или привязки к реальности. Что неудивительно, поскольку для написания реальной статьи надо все эти продукты знать. А этим может похвастаться далеко не каждый профессиональный разработчик.

В итоге вместо осмысленного выбора мы получаем мычание, общие слова про ORM, равномерно размазанные по всем трем участникам соревнований:

  • Про Доктрину написано, что она "предлагает расширенные возможности для написания запросов и поддерживает транзакции и кэширование".  Как будто другие две этого не предлагают.

  • "Eloquent предлагает удобный API для выполнения операций: запросов, вставок, обновлений и удалений записей, а также поддерживает быстрое извлечение данных и управление взаимосвязями". Ну просто киллер-фича, отсутствующая в других библиотеках.

  • Про Propel указано, что она "построена на основе PDO". Это, конечно, сразу выделяет её на фоне остальных! А также высокая производительность. Птица-говорун отличается умом и производительностью. И популярностью. Вот только почему-то "медленную" Доктрину устанавливают в 50 раз чаще, чем "быстрый" Пропель. У которого статистика использования говорит о популярности на уровне поддержки легаси проектов.

Собственно, отдельные элементы статьи наводят на мысль, что исходно это и есть небрежно переведённый индусский спам. "Чтобы получить электронное письмо от пользователя", ага.

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

Sign up to leave a comment.