Каково значение ORM?

select userid, value, date
  from thetable t1 ,
       ( select t2.userid, max(t2.date) date2 
           from thetable t2 
          group by t2.userid ) t3
 where t3.userid t1.userid and
       t3.date2 = t1.date

, по моему скромному мнению, это работает. HTH

7
задан gbn 5 July 2009 в 09:39
поделиться

6 ответов

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

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

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

8
ответ дан 6 December 2019 в 19:40
поделиться

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

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

Если вы пишете весь SQL вручную, вы «микрооптимизируете» весь продукт, включая части, которые в нем не нуждаются. Значит, вы в основном тратите силы.

3
ответ дан 6 December 2019 в 19:40
поделиться

вот определение из Википедии

Объектно-реляционное отображение - это метод программирования для преобразования данных между несовместимыми системами типов в реляционных базах данных и объектно-ориентированных языках программирования. По сути, это создает «базу данных виртуальных объектов», которую можно использовать из языка программирования.

2
ответ дан 6 December 2019 в 19:40
поделиться

ORM избавляет вас от необходимости писать этот надоедливый SQL.

Это также полезно, когда вы (никогда) не переносите свое программное обеспечение на другой механизм базы данных.

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

0
ответ дан 6 December 2019 в 19:40
поделиться

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

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

Итак, i не откажется от ORM, если вы не являетесь Twitter или Flickr. Сначала сделайте обычный анализ БД: вы видите много полных сканирований таблиц? добавить соответствующие индексы. Много запросов на страницу? переосмыслить свои таблицы. Каждому пользователю нужно много статистики? предварительно вычислить их в пакетном задании и обслуживать оттуда.

0
ответ дан 6 December 2019 в 19:40
поделиться

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

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

У меня есть рекомендация, если вам нужно выполнить сложный запрос (например: отчеты), отличный от (Create Update Delete / CRUD), и если ваше приложение не будет использовать другую базу данных, вы должны использовать прямой sql (я думаю, что в Django есть такая функция)

0
ответ дан 6 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

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