Автор оригинала: fisher
90% тупки вашей системы - база. Правильная работа с базой - святая святых любого программиста. Чтобы правиьлно работать с базой надо знать SQL и понимать, почему математически эквивалентный набор одних SQL приводит в к одному результату по скорости, а другой к другому.
Отлично. Вопрос-таки состоит в том, что ORM генерирует неэффективный SQL?
Сможете ли вы сделать на ORM элементарный запрос вида set counter = counter+1, updated=updated чтобы запрос выполнился _СИЛЬНО_ быстрее потому что updated это автоматический timestamp, но по updated есть индекс, и в данном случаем вам не нужно менять время?
На какой ORM? На существующих (тех, по крайней мере, что я рассматривал) - нет. Там даже отбор по связанным объектам проблематично сделать (не говоря уж о применении к связанным объектам агрегатных функций), а это ограничение по функциональности, приводящее к тому, что те вычисления, что должны выполняться в базе, проделываются на стороне PHP. На "идеальной" - да. Благо в существующем прототипе я уже могу пометить атрибут модели как 'searchable', 'private' или 'internal' и получать в зависимости от этого SQL, более-менее разумно использующий индексы. Понимаете, вся оптимизация запросов подчиняется фиксированному - и не такому уж большому - набору правил, которые не так сложно реализовать в конкретном драйвере. Это не искусство, это рутина, которой должна заниматься машина.
Посмотрите разницу между plain sql и pl/sql из приведенной ссылки, наконец.
Условий тестирования нет (битая ссылка на оригинал статьи). Без этого толку в цифрах нет.
понимаю, за исключением того, что цифры Ваши - с потолка.
Аналогично. Вы так легко оперируете цифрами безотносительно конкретной задачи, что я прямо-таки позавидовал.
гибкость - не есть достоинство ORM.
В некотором смысле вы правы.
Само по себе O-R mapping ничего не дает. Однако с его помощью многие задачи можно автоматизировать. В идеале - описать модель и
автоматически получить схему данных на реляционных табличках, код, поддерживающий целостность, код, проводящий валидацию, формы редактирования с контролем ошибок, скрипты миграции между версиями схемы данных и многое-многое другое. ORM в этой задаче - не самоцель, а лишь инструмент, позволяющий совместить объектную модель, которая более удобна для человека, с реляционной, которая более удобна для хранения данных. Составная часть. Вот такая система - гибкая.
переписать SQL-запрос, понять по одному лишь запросу модель, разбить один запрос на несколько - легче когда есть plain SQL, чем разбираться в ORM-based коде.
Ну, во-первых, в ORM-based коде не должно быть SQL-запросов - это признак того, что в коде-спагетти мешают несколько подходов. Так что "переписать SQL-запрос" отпадает. "понять по одному лишь запросу" модель - задача, откровенно говоря, довольно странная; пресловутый ORM-based код вообще должен на 99% состоять из описания модели. Если возникает задача "понять модель" - это плохая, негодная ORM. По поводу "разбить один запрос на несколько" -
когда у вас появится отвественность за проебы внедрения сложный идей в работу вашей команды - вот тогда вы поймете о чем я.
[...]
в обсуждении очень характерен идеологический аспект, аспект любви, хороший по природе своей, но человек слепнет от него. мне этого показалось достаточным, чтобы влезть и попробовать охладить пыл.вы неглупые люди, но вас несет.
Я не говорю о том, что надо переделывать работу сложившейся команды, натягивать ORM на существующие структуры данных и вообще пихать его во все доступные дыры. Про.бать можно практически всё, что угодно. "Работает - не трожь".
Лично меня интересует сферический конь в вакууме - проблемы применения более-менее функциональной ORM безотносительно опыта/вменяемости разработчиков. Кое что полезное из текущего обсуждения я уже вынес, несмотря то, что оно быстро сползло на "любишь - не любишь".
код, который тут приводился - сложен, и в гибкости, и в саппорта - во всём . хотите анализировать - руками-ногами за.
Вперед. Приведенный код - фактически построение синтаксического дерева описания запроса вручную. Если очень хочется, его можно заменить на некий Object Query Language. Интерес представляет не то, что-де "мы выкинули SQL" (меняя шило на мыло), а то, что критерии запроса могут формироваться автоматически и то, что детали реализации (например, таблицы ассоциаций) скрыты. См. например второй пример
Alexandre.
поймите, через "болезнь ORM" прошло очень много людей. ей надо переболеть. и если подходить по науке, то ORM это не более чем прокладка, удобная программисту, соединяющая его модель со строгой математически реляционной моделью. прокладка обычно громоздкая и удобная только на конкретном наборе Ваших задач. Передать на сапоорт такой код кому-то ещё - убиться можно.
Передавать на саппорт код, в котором логика размазана между базой данных и скриптами, тоже не сладко.
я видел этот код. предстаьте себе, что кто-то его написал год назад. за год у Вас выросла нагрузка, вам надо затюнить приложение, и скорее где-то просто переписать запросы, а где-то и вовсе изменить архитектуру. Программист, написавший этот код - уволился. Допустим, там не один запрос, а десять. вот как только по этому коду понять "модель"? А теперь посмотрите на SQL который привел Alexandre. Вы действительно не считаете, что SQL понятнее?
Модель описывается описанием модели (это
не объявление класса), а не запросами. Честно. Или мы говорим о разных вещах. По поводу "переписать запросы/изменить архитектуру". Изменение архитектуры (в нормальном варианте развития событий, а не в том, где ORM притянута за уши) сведется к изменению описания модели и перегенерации кода. Как пример могу предложить изменить в модели связь 1:N на связь N:M. Хорошая ORM вообще скроет тот факт, что изменения были. SQL запросы придется основательно перелопачивать.
Однако, хотелось бы получить развитие темы "переписывания запросов". Это будет полезно и любопытно. С чем связано переписывание запросов? Изменение модели? Связей? Оптимизация, основывающаяся на набравшейся статистике?
>>.. Обратите внимание, кстати, на то, что написано в статье
bkonst, если Вы ещё не поняли - эту "статью" писал я. года три назад. я знаю, что в ней написано и целиком и полностью разделяю
Естественно, не понял, так как статья написана гораздо мягче. Или у вас сегодня приступ плохого настроения. Или хреново получается "охладить пыл". Как сказано в статье:
кое-что из этого списка(за исключением п.1) скорее не принципиальные минусы, а «сложности»
Любое изменение сложившегося порядка вызывает "сложности". ORM - не исключение.
-~{}~ 29.09.06 12:54:
Raziel[SD]
ORM выражения не читабельны, примеры здесь уже были.
Как уже было сказано, ORM-выражения можно заменить на что-то другое. Но идея в том, что эти самые ORM-выражения должны генерироваться ав-то-ма-ти-чески. На основании метаданных.
...Кому-то и LISP нечитабелен.