SlideShare a Scribd company logo
1 of 23
Доклад
«ORM: благо или зло?»
Автор
Горшков Сергей Вадимович
Что такое ORM?
ORM (Object-relational mapping) - технология
программирования, которая связывает базы
данных с концепциями объектно-
ориентированных языков программирования.
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Что такое ORM?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Нет ORM Есть ORM
Приложение
База данных
Приложение
База данных
ORM
Что такое ORM?
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Нет ORM
Есть ORM
INSERT INTO clients SET name=‘Альфа’;
$client = new Client ();
$client->setName (“Альфа“);
$client->persist ();
$client = new Client ();
$client->name = “Альфа“;
$client->Save ();
• Сократить семантический провал между объектной
и реляционной формой хранения данных.
• Повысить скорость и снизить трудоемкость работы
программиста (требуется меньше кода, который
проще отлаживать).
• Код, использующий ORM, меньше подвержен
ошибкам.
Зачем нужны ORM?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Для тестов будем использовать
Doctrine 2 (из Symfony)
Автор
Горшков Сергей Вадимович
Одна из наиболее современных и мощных ORM,
доступных для связки PHP / MySQL.
Содержит класс QueryBuilder, позволяющий
конструировать запросы.
Также реализует собственный диалект SQL под
названием DQL, в котором вместо таблиц и полей
используются объекты и их свойства.
доклад
«ORM: зло или благо?»
Семантический провал
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Мир объектов Мир реляционной
базы данных
TABLE Clientclass Client
$client = new Client ();
$client->setName (“Альфа“);
$client->persist ();
• Не всегда можно однозначно сопоставить класс
и объект БД (например, в случае таблиц-связок нет
нужды плодить отдельный объект для каждой связи).
Возражения?
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
• Не представляя себе реальной структуры БД,
программисту будет крайне сложно работать с базой
рационально, и оптимизировать скорость работы.
• Абстрагируясь от базы, мы практически исключаем возможность
использования ее «продвинутых» средств, таких как хранимые
процедуры, представления, триггеры.
Снизить трудозатраты
программиста
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
$client = new Client ();
$client->setName (“Альфа“);
$client->persist ();
$s=“INSERT INTO clients SET name=‘Альфа’”;
mysql_query ($s, $connid);
Возражения?
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Возражения?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
• Ускорение работы программиста обычно приводит
к замедлению работы продукта, что в конечном счете,
с точки зрения экономики, окажется гораздо менее
рационально.
• Все случаи обращения к БД в сколько-нибудь
сложном проекте все равно не охватываются
стандартными возможностями ORM. В таких случаях
применяются «костыли», которые, в конечном счете,
замедляют работу программиста.
Снизить число ошибок
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Скорость: тестовый случай
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
ПродажиКлиенты Товары
Продажи –
Товары
Задача – построить таблицу вида:
Дата продажи Клиент Сумма
01.01.2011 Альфа 1000
Doctrine Query Builder
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
DQL
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Прямой запрос из Doctrine
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Прямой запрос из PHP: подзапрос
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Прямой запрос из PHP: JOIN
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Кэширование суммы в sales
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
И какие же результаты?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Способ
извлечения
Время, сек.
Doctrine
Query Builder
9.14
DQL 7.35
Прямой
запрос из
Doctrine
* 7.15
0.13
И какие же результаты?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Способ
извлечения
Время, сек.
Запрос с
подзапросами
из PHP
2.18
Запрос из
PHP с JOIN
0.02
Вариант с
кэшированием
суммы в sales
0.01
И все-таки, ORM в index.art есть!
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Пожалуйста, вопросы!
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»

More Related Content

Similar to ORM: благо или зло?

Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Программируем быстрее с CodeRush
Программируем быстрее с CodeRushПрограммируем быстрее с CodeRush
Программируем быстрее с CodeRushGoSharp
 
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint Kyiv
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Alexander Gornik
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис РечкуновJSib
 
Risspa domxss
Risspa domxssRisspa domxss
Risspa domxssyaevents
 
Как не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPressКак не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPressYevhen Kotelnytskyi
 
Эмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивностьЭмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивностьEgor Malkevich
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...e-Legion
 
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!CodeFest
 
Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14
Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14
Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14Ilya Korolev
 
"Инструменты современного предпринимателя" Мастер-класс Ильи Королева
"Инструменты современного предпринимателя" Мастер-класс Ильи Королева"Инструменты современного предпринимателя" Мастер-класс Ильи Королева
"Инструменты современного предпринимателя" Мастер-класс Ильи КоролеваPeri Innovations
 
Олег Алистратов - Постановка задачи
Олег Алистратов - Постановка задачиОлег Алистратов - Постановка задачи
Олег Алистратов - Постановка задачиLuxoft Education Center
 
Шаг-Рысь-Галоп: видимое ускорение разработки
Шаг-Рысь-Галоп: видимое ускорение разработкиШаг-Рысь-Галоп: видимое ускорение разработки
Шаг-Рысь-Галоп: видимое ускорение разработкиSQALab
 

Similar to ORM: благо или зло? (20)

Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Программируем быстрее с CodeRush
Программируем быстрее с CodeRushПрограммируем быстрее с CodeRush
Программируем быстрее с CodeRush
 
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Методоллогии Agile
Методоллогии AgileМетодоллогии Agile
Методоллогии Agile
 
Разработка бизнес приложений (3)
Разработка бизнес приложений (3)Разработка бизнес приложений (3)
Разработка бизнес приложений (3)
 
Презентация Mobile developer day #moco
Презентация Mobile developer day #mocoПрезентация Mobile developer day #moco
Презентация Mobile developer day #moco
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
 
Risspa domxss
Risspa domxssRisspa domxss
Risspa domxss
 
Как не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPressКак не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPress
 
Эмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивностьЭмоции в разработки. Спасаем продуктивность
Эмоции в разработки. Спасаем продуктивность
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Ibm jazz educonferencenau-10-2012
Ibm jazz educonferencenau-10-2012Ibm jazz educonferencenau-10-2012
Ibm jazz educonferencenau-10-2012
 
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
 
Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14
Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14
Инструменты современного предпринимателя. Plug and Play Dagestan. 15/02/14
 
"Инструменты современного предпринимателя" Мастер-класс Ильи Королева
"Инструменты современного предпринимателя" Мастер-класс Ильи Королева"Инструменты современного предпринимателя" Мастер-класс Ильи Королева
"Инструменты современного предпринимателя" Мастер-класс Ильи Королева
 
Олег Алистратов - Постановка задачи
Олег Алистратов - Постановка задачиОлег Алистратов - Постановка задачи
Олег Алистратов - Постановка задачи
 
Шаг-Рысь-Галоп: видимое ускорение разработки
Шаг-Рысь-Галоп: видимое ускорение разработкиШаг-Рысь-Галоп: видимое ускорение разработки
Шаг-Рысь-Галоп: видимое ускорение разработки
 

More from index.art

Разработка, продвижение и сопровождение сайтов
Разработка, продвижение и сопровождение сайтовРазработка, продвижение и сопровождение сайтов
Разработка, продвижение и сопровождение сайтовindex.art
 
Плюсы минусинска
Плюсы минусинскаПлюсы минусинска
Плюсы минусинскаindex.art
 
МегаКвест: доклад на дне открытых дверей
МегаКвест: доклад на дне открытых дверейМегаКвест: доклад на дне открытых дверей
МегаКвест: доклад на дне открытых дверейindex.art
 
Шаблонизация на стороне клиента. Использование для вывода настраиваемых отчетов
Шаблонизация на стороне клиента. Использование для вывода настраиваемых отчетовШаблонизация на стороне клиента. Использование для вывода настраиваемых отчетов
Шаблонизация на стороне клиента. Использование для вывода настраиваемых отчетовindex.art
 
Автоматическая загрузка и обработка данных для веб-порталов
Автоматическая загрузка и обработка данных для веб-порталовАвтоматическая загрузка и обработка данных для веб-порталов
Автоматическая загрузка и обработка данных для веб-порталовindex.art
 
Реализация складского учета методом FIFO с использованием продвинутых возможн...
Реализация складского учета методом FIFO с использованием продвинутых возможн...Реализация складского учета методом FIFO с использованием продвинутых возможн...
Реализация складского учета методом FIFO с использованием продвинутых возможн...index.art
 
SaaS "в облаках". День Открытых Дверей 2012
SaaS "в облаках". День Открытых Дверей 2012SaaS "в облаках". День Открытых Дверей 2012
SaaS "в облаках". День Открытых Дверей 2012index.art
 
Как угробить SEO? Вредные советы
Как угробить SEO? Вредные советыКак угробить SEO? Вредные советы
Как угробить SEO? Вредные советыindex.art
 
Битва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовБитва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовindex.art
 
Вычислительная погрешность в бухгалтерском учете
Вычислительная погрешность в бухгалтерском учетеВычислительная погрешность в бухгалтерском учете
Вычислительная погрешность в бухгалтерском учетеindex.art
 
E-SET Version 2.0
E-SET Version 2.0E-SET Version 2.0
E-SET Version 2.0index.art
 
E-SET open air 2013
E-SET open air 2013E-SET open air 2013
E-SET open air 2013index.art
 
СНР Процесс и результаты
СНР Процесс и результатыСНР Процесс и результаты
СНР Процесс и результатыindex.art
 

More from index.art (13)

Разработка, продвижение и сопровождение сайтов
Разработка, продвижение и сопровождение сайтовРазработка, продвижение и сопровождение сайтов
Разработка, продвижение и сопровождение сайтов
 
Плюсы минусинска
Плюсы минусинскаПлюсы минусинска
Плюсы минусинска
 
МегаКвест: доклад на дне открытых дверей
МегаКвест: доклад на дне открытых дверейМегаКвест: доклад на дне открытых дверей
МегаКвест: доклад на дне открытых дверей
 
Шаблонизация на стороне клиента. Использование для вывода настраиваемых отчетов
Шаблонизация на стороне клиента. Использование для вывода настраиваемых отчетовШаблонизация на стороне клиента. Использование для вывода настраиваемых отчетов
Шаблонизация на стороне клиента. Использование для вывода настраиваемых отчетов
 
Автоматическая загрузка и обработка данных для веб-порталов
Автоматическая загрузка и обработка данных для веб-порталовАвтоматическая загрузка и обработка данных для веб-порталов
Автоматическая загрузка и обработка данных для веб-порталов
 
Реализация складского учета методом FIFO с использованием продвинутых возможн...
Реализация складского учета методом FIFO с использованием продвинутых возможн...Реализация складского учета методом FIFO с использованием продвинутых возможн...
Реализация складского учета методом FIFO с использованием продвинутых возможн...
 
SaaS "в облаках". День Открытых Дверей 2012
SaaS "в облаках". День Открытых Дверей 2012SaaS "в облаках". День Открытых Дверей 2012
SaaS "в облаках". День Открытых Дверей 2012
 
Как угробить SEO? Вредные советы
Как угробить SEO? Вредные советыКак угробить SEO? Вредные советы
Как угробить SEO? Вредные советы
 
Битва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовБитва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтов
 
Вычислительная погрешность в бухгалтерском учете
Вычислительная погрешность в бухгалтерском учетеВычислительная погрешность в бухгалтерском учете
Вычислительная погрешность в бухгалтерском учете
 
E-SET Version 2.0
E-SET Version 2.0E-SET Version 2.0
E-SET Version 2.0
 
E-SET open air 2013
E-SET open air 2013E-SET open air 2013
E-SET open air 2013
 
СНР Процесс и результаты
СНР Процесс и результатыСНР Процесс и результаты
СНР Процесс и результаты
 

ORM: благо или зло?

  • 1. Доклад «ORM: благо или зло?» Автор Горшков Сергей Вадимович
  • 2. Что такое ORM? ORM (Object-relational mapping) - технология программирования, которая связывает базы данных с концепциями объектно- ориентированных языков программирования. Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 3. Что такое ORM? Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» Нет ORM Есть ORM Приложение База данных Приложение База данных ORM
  • 4. Что такое ORM? Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?» Нет ORM Есть ORM INSERT INTO clients SET name=‘Альфа’; $client = new Client (); $client->setName (“Альфа“); $client->persist (); $client = new Client (); $client->name = “Альфа“; $client->Save ();
  • 5. • Сократить семантический провал между объектной и реляционной формой хранения данных. • Повысить скорость и снизить трудоемкость работы программиста (требуется меньше кода, который проще отлаживать). • Код, использующий ORM, меньше подвержен ошибкам. Зачем нужны ORM? Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?»
  • 6. Для тестов будем использовать Doctrine 2 (из Symfony) Автор Горшков Сергей Вадимович Одна из наиболее современных и мощных ORM, доступных для связки PHP / MySQL. Содержит класс QueryBuilder, позволяющий конструировать запросы. Также реализует собственный диалект SQL под названием DQL, в котором вместо таблиц и полей используются объекты и их свойства. доклад «ORM: зло или благо?»
  • 7. Семантический провал Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» Мир объектов Мир реляционной базы данных TABLE Clientclass Client $client = new Client (); $client->setName (“Альфа“); $client->persist ();
  • 8. • Не всегда можно однозначно сопоставить класс и объект БД (например, в случае таблиц-связок нет нужды плодить отдельный объект для каждой связи). Возражения? Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?» • Не представляя себе реальной структуры БД, программисту будет крайне сложно работать с базой рационально, и оптимизировать скорость работы. • Абстрагируясь от базы, мы практически исключаем возможность использования ее «продвинутых» средств, таких как хранимые процедуры, представления, триггеры.
  • 9. Снизить трудозатраты программиста Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» $client = new Client (); $client->setName (“Альфа“); $client->persist (); $s=“INSERT INTO clients SET name=‘Альфа’”; mysql_query ($s, $connid);
  • 11. Возражения? Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» • Ускорение работы программиста обычно приводит к замедлению работы продукта, что в конечном счете, с точки зрения экономики, окажется гораздо менее рационально. • Все случаи обращения к БД в сколько-нибудь сложном проекте все равно не охватываются стандартными возможностями ORM. В таких случаях применяются «костыли», которые, в конечном счете, замедляют работу программиста.
  • 12. Снизить число ошибок Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 13. Скорость: тестовый случай Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» ПродажиКлиенты Товары Продажи – Товары Задача – построить таблицу вида: Дата продажи Клиент Сумма 01.01.2011 Альфа 1000
  • 14. Doctrine Query Builder Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 16. Прямой запрос из Doctrine Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 17. Прямой запрос из PHP: подзапрос Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 18. Прямой запрос из PHP: JOIN Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?»
  • 19. Кэширование суммы в sales Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 20. И какие же результаты? Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» Способ извлечения Время, сек. Doctrine Query Builder 9.14 DQL 7.35 Прямой запрос из Doctrine * 7.15 0.13
  • 21. И какие же результаты? Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?» Способ извлечения Время, сек. Запрос с подзапросами из PHP 2.18 Запрос из PHP с JOIN 0.02 Вариант с кэшированием суммы в sales 0.01
  • 22. И все-таки, ORM в index.art есть! Автор Горшков Сергей Вадимович доклад «ORM: зло или благо?»
  • 23. Пожалуйста, вопросы! Автор Горшков Сергей Вадимович доклад «ORM: благо или зло?»