SlideShare une entreprise Scribd logo
1  sur  69
Télécharger pour lire hors ligne
Cycle ORM
и графы
2
Антон Титов (a.k.a. “Wolfy-J”)
Технический директор и соучредитель Spiral Scout
https://github.com/wolfy-j https://habr.com/ru/users/lachezis/ https://twitter.com/lachezis
Коммерческая разработка последние 13 лет
Основной стек: PHP7, Golang
О чем я буду рассказывать
1. Зачем нужны ORM?
2. ActiveRecord vs DataMapper
3. Что необходимо для разработки ORM?
4. Реализация persist слоя в гифках
5. Обзор Cycle ORM
3
Зачем нужны ORM?
4
Зачем нужны ORM?
- Упрощают общение с источниками данных
5
Зачем нужны ORM?
- Упрощают общение с источниками данных
- Замедляют приложение
6
Зачем нужны ORM?
- Упрощают общение с источниками данных
- Замедляют приложение
- Изолируют доменный слой
7
Зачем нужны ORM?
- Упрощают общение с источниками данных
- Замедляют приложение
- Изолируют доменный слой
- Упрощают тестирование
8
ActiveRecord vs DataMapper
9
Концептуальные различия
- Метод save() (на самом деле нет).
- Доступ к данным через ::find() vs Repository (тоже нет).
10
Концептуальные различия
- Метод save() (на самом деле нет).
- Доступ к данным через ::find() vs Repository (тоже нет).
- Представление данных и “не думай о базе данных”
- Порядок реализации и изоляция доменного слоя
11
Концептуальные различия
- Метод save() (на самом деле нет).
- Доступ к данным через ::find() vs Repository (тоже нет).
- Представление данных и “не думай о базе данных”
- Порядок реализации и изоляция доменного слоя
- Конкретные особенности реализации*
12
Active Record
13
- Не требует дополнительной настройки
- Необходимо помнить схему базы данных
- Просто выучить
- Легко написать
- Сложно поддерживать
- Всегда есть базовый класс
Data Mapper
14
- Требует дополнительной маппинг схемы
- Может сам сгенерировать схему базы данных
- Трудно выучить
- Сложно написать
- Сложно поддерживать
- Базовый класс не обязателен*
Где какой использовать?
15
- ActiveRecord - для мелких проектов.
Где какой использовать?
16
- ActiveRecord - для мелких проектов.
- DataMapper - для сложный проектов.
Где какой использовать?
17
- ActiveRecord - для мелких проектов.
- DataMapper - для сложный проектов.
- ...
- Вообще не использовать ORM!
“А как же тесты?”
18
Тестируем Data Mapper
19
- 2 мока:
- EntityManager
- UserRepository
- Unit тест
- Без запросов в базу
- Доверяем ORM
Тестируем Active Record
20
- Unit тест
- Мокаем Record?
- Или Repository?
- onSave события?
- Acceptance тест
- SQLite в памяти
- Dev база
- Не доверяем ORM
Практические различия
- Различные принципы изоляции доменного кода
- Data Mapper проще тестировать чем Active Record
- Active Record следует за схемой таблиц
- Data Mapper следует за схемой маппинга
- Выбор Active Record ORM гораздо шире (написать AR проще)
21
22
Active Record Data MapperHybrid
23
Active Record Data MapperHybrid
24
Active Record Data MapperHybrid
Active Record
25
Data MapperHybrid
Что необходимо для ORM?
2
6
Что необходимо для ORM?
- Database Abstraction Layer (DBAL) - интроспекция, рефлексия
- Query Builder, Query DSL, любой другой механизм выборки
27
Что необходимо для ORM?
- Database Abstraction Layer (DBAL) - интроспекция, рефлексия
- Query Builder, Query DSL, любой другой механизм выборки
- EntityMap/Heap для хранения объектов и их связей
- Mapping schema
28
Что необходимо для ORM?
- Database Abstraction Layer (DBAL) - интроспекция, рефлексия
- Query Builder, Query DSL, любой другой механизм выборки
- EntityMap/Heap для хранения объектов и их связей
- Mapping schema
- Persist слой
- Различные типы связей
29
Что необходимо для ORM?
- Database Abstraction Layer (DBAL) - интроспекция, рефлексия
- Query Builder, Query DSL, любой другой механизм выборки
- EntityMap/Heap для хранения объектов и их связей
- Mapping schema
- Persist слой
- Различные типы связей
- Тесты... очень много тестов
30
Persist и графы зависимостей
3
1
Требование к persist слою
- Топологическая сортировка объектов и их связей
- Оптимальное число запросов
32
Требование к persist слою
- Топологическая сортировка объектов и их связей
- Оптимальное число запросов
- Переносимые транзакции и легкое тестирование
- Корректная обработка ошибок
33
Требование к persist слою
- Топологическая сортировка объектов и их связей
- Оптимальное число запросов
- Переносимые транзакции и легкое тестирование
- Корректная обработка ошибок
- Отсутствие утечек памяти (RoadRunner)
- Возможность работы с несколькими базами одновременно
34
Требование к persist слою
- Топологическая сортировка объектов и их связей
- Оптимальное число запросов
- Переносимые транзакции и легкое тестирование
- Корректная обработка ошибок
- Отсутствие утечек памяти (RoadRunner)
- Возможность работы с несколькими базами одновременно
- Динамический маппинг модели к нескольким таблицам (hi, Drupal!)
35
Граф зависимостей
36
- Ориентированный граф
- Вершины - доменные сущности
- Ребра - связи между сущностями
- Типы графов в ORM:
- Направленный ациклический
- Направленный граф-цикл
Граф с циклами
37
- Ориентированный граф
- Вершины - доменные сущности
- Ребра - связи между сущностями
- Типы графов в ORM:
- Направленный ациклический
- Направленный граф-цикл
38
Топологическая сортировка в Doctrine
- InternalCommitOrderCalculator
- Поиск в глубину (DFS)
- Сортировка предшествует сохранению
- Сортируем ClassMetadata
- Вызываем Persister в порядке
сортировки
- Выполняем расчеты внутри EntityMap
39
Persist в Doctrine
- computeChangeSets
- assertThatThereAreNoUnintentionallyNonPersistedAssociations
- orphanRemovals
- getCommitOrder
- collectionDeletions, entityInsertions, entityUpdates, extraUpdates,
collectionUpdates, entityDeletions
- события и хуки
- Около 4 тысяч строк кода :(
40
Можно ли проще?
41
Поиск в глубину (DFS) vs поиск в ширину (BFS)
42
DFS + ❤ + BFS = IDDFS
- Итеративный поиск в глубину
- Преобразуем граф объектов в граф
операций
- Ищем первую операцию без
зависимостей по цепочке
- Объединяем поиск и persist в один
процесс
43
Реализация в коде - Команда
- Вершина - команда
- Ребро - зависимость
- Агрегирующие команды
44
Реализация в коде - Зависимость
- Проброс значения по цепочке
- Зависимость - ожидание
значения
- Одновременно уточняем
финальные данные
45
Простой пример
- Команда зависит от значения
другой команды
- “Обещаем” значение через
зависимость
- Пробрасываем значения по
цепочке при выполнении
команды
46
Реализация в коде - Транзакция
- Команда
- Узлы - агрегирующие команды
- Новые данные гидрируют модели
после окончания транзакции
47
Реальный пример
48
Реальный пример
49
Зависимость от нескольких родителей
50
Зависимость от нескольких родителей
51
Внезапно... циклы!
52
Внезапно... циклы!
53
Преобразуем в граф команд
54
Что в итоге
- Persist графов любой сложности
- Сортировка и транзакция один процесс
- Связи между любыми ключами, любыми базами
- Persist изолирован от доменных моделей и entity map
Cycle ORM
5
5
56
Поддержка нескольких баз данных
- MySQL, SQLite, MariaDB, SQLServer
12+, Postgres 9.2+
- Логическая изоляция баз данных
- Общая транзакция
- Read/write соединения
- Авто-переподключение
- Авто-миграции
- Под капотом PDO
57
Загрузка связанных данных
- Загрузка данных любой
вложенности
- Несколько стратегий выборки
- Сложные запросы и фильтрация
58
Построение сложных запросов
- Поддержка вложенных
запросов
- Запросы на чистом SQL
- Использование данных
нескольких связей
одновременно
59
Описываем схему вручную
- Маппинг схема описывает все
поведение
- Можно изменять в runtime
- Можно описывать используя
декларативный билдер схем
60
Либо используя аннотации
- На основе Doctrine Annotation
- Есть autocomplete
61
Локальные транзакции
- Несколько UoW в одном приложении
- Абстракция с тремя методами
- Каскадное сохранение
- Простое тестирование
62
Lazy-loaded Embeddings
- Загружаем только нужные части
объекта
- При необходимости, используем
lazy-load
- Embeddings ведут себя как обычные
связи
- Выбираем embedding отдельно от
родителя
63
Динамическая схема сущностей (hi Drupal nodes!)
- Описываем схему в runtime
- Конфигурируем базу данных
используя декларативные схемы
- Храним схему в JSON прямо в базе
64
Динамическая схема сущностей (hi, Drupal nodes!)
- Описываем маппинг схему в runtime
- Без или с кодо-генерацией
- Описываем связи, генерируем
запросы
- Смешиваем с обычными моделями
65
Динамическая схема сущностей (hi Drupal nodes!)
- Описываем маппинг схему в runtime
- Без или с кодо-генерацией
- Описываем связи, генерируем
запросы
- Смешиваем с обычными моделями
66
Производительность
67
CYCLE-ORM.DEV
- 4-е поколение ORM
- В 8 раз меньше Doctrine 2
- 94% покрытие тестами, 92% MSI
- Spiral Framework и Yii 3
- Официальная поддержка Spiral Scout
68
Недостатки
- Новая ORM
- Небольшое комьюнити
- Отсутствуют коробочные интеграции в большинство фреймворков
- Есть большой запас для оптимизаций
- Пока нет поддержки композитных ключей (но мы работаем над этим!)
69
Спасибо за внимание
Ссылки:
- https://github.com/doctrine/orm/blob/master/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php
- https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/limitations-and-known-issues.html
- https://en.wikipedia.org/wiki/Depth-first_search
- https://en.wikipedia.org/wiki/Breadth-first_search
- https://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search
- https://www.geeksforgeeks.org/iterative-depth-first-traversal/
- https://cycle-orm.dev/docs
- https://github.com/cycle/orm
- https://github.com/cycle/docs/issues/3 (сравнение с Doctrine 2 и Eloquent)
- https://github.com/yiisoft/yii-cycle

Contenu connexe

Tendances

Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Ontico
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применениюIvan Kolodyazhny
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Сергей Белов
Сергей БеловСергей Белов
Сергей БеловCodeFest
 
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...Ontico
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlDaniel Podolsky
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?Daniel Podolsky
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаPython Meetup
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
 
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Ontico
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Ontico
 
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Ontico
 
My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruAlex Chistyakov
 

Tendances (20)

Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применению
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Сергей Белов
Сергей БеловСергей Белов
Сергей Белов
 
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosqlTk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
Что нового в MySQL 8.0? / Дмитрий Ленев (Oracle)
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
 
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
 
My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ru
 

Similaire à Anton Tsitou "Cycle ORM and Graphs"

2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинYandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
История небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLИстория небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLdev1ant
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPFlyElephant
 
Oracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиOracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиAndrey Akulov
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipARCCN
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...ARCCN
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийSveta Smirnova
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBASlach
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridMikhail Shcherbakov
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. "YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. Yandex
 
Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14remizovd
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 

Similaire à Anton Tsitou "Cycle ORM and Graphs" (20)

2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
История небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLИстория небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQL
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 
Oracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памятиOracle database In-Memory - новая технология обработки в памяти
Oracle database In-Memory - новая технология обработки в памяти
 
supercluster
superclustersupercluster
supercluster
 
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchipРазработка OpenFlow-коммутатора на базе сетевого процессора EZchip
Разработка OpenFlow-коммутатора на базе сетевого процессора EZchip
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложений
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data Grid
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс. "YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
 
Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Ramail Arch
Ramail ArchRamail Arch
Ramail Arch
 

Plus de Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

Plus de Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Anton Tsitou "Cycle ORM and Graphs"

  • 2. 2 Антон Титов (a.k.a. “Wolfy-J”) Технический директор и соучредитель Spiral Scout https://github.com/wolfy-j https://habr.com/ru/users/lachezis/ https://twitter.com/lachezis Коммерческая разработка последние 13 лет Основной стек: PHP7, Golang
  • 3. О чем я буду рассказывать 1. Зачем нужны ORM? 2. ActiveRecord vs DataMapper 3. Что необходимо для разработки ORM? 4. Реализация persist слоя в гифках 5. Обзор Cycle ORM 3
  • 5. Зачем нужны ORM? - Упрощают общение с источниками данных 5
  • 6. Зачем нужны ORM? - Упрощают общение с источниками данных - Замедляют приложение 6
  • 7. Зачем нужны ORM? - Упрощают общение с источниками данных - Замедляют приложение - Изолируют доменный слой 7
  • 8. Зачем нужны ORM? - Упрощают общение с источниками данных - Замедляют приложение - Изолируют доменный слой - Упрощают тестирование 8
  • 10. Концептуальные различия - Метод save() (на самом деле нет). - Доступ к данным через ::find() vs Repository (тоже нет). 10
  • 11. Концептуальные различия - Метод save() (на самом деле нет). - Доступ к данным через ::find() vs Repository (тоже нет). - Представление данных и “не думай о базе данных” - Порядок реализации и изоляция доменного слоя 11
  • 12. Концептуальные различия - Метод save() (на самом деле нет). - Доступ к данным через ::find() vs Repository (тоже нет). - Представление данных и “не думай о базе данных” - Порядок реализации и изоляция доменного слоя - Конкретные особенности реализации* 12
  • 13. Active Record 13 - Не требует дополнительной настройки - Необходимо помнить схему базы данных - Просто выучить - Легко написать - Сложно поддерживать - Всегда есть базовый класс
  • 14. Data Mapper 14 - Требует дополнительной маппинг схемы - Может сам сгенерировать схему базы данных - Трудно выучить - Сложно написать - Сложно поддерживать - Базовый класс не обязателен*
  • 15. Где какой использовать? 15 - ActiveRecord - для мелких проектов.
  • 16. Где какой использовать? 16 - ActiveRecord - для мелких проектов. - DataMapper - для сложный проектов.
  • 17. Где какой использовать? 17 - ActiveRecord - для мелких проектов. - DataMapper - для сложный проектов. - ... - Вообще не использовать ORM!
  • 18. “А как же тесты?” 18
  • 19. Тестируем Data Mapper 19 - 2 мока: - EntityManager - UserRepository - Unit тест - Без запросов в базу - Доверяем ORM
  • 20. Тестируем Active Record 20 - Unit тест - Мокаем Record? - Или Repository? - onSave события? - Acceptance тест - SQLite в памяти - Dev база - Не доверяем ORM
  • 21. Практические различия - Различные принципы изоляции доменного кода - Data Mapper проще тестировать чем Active Record - Active Record следует за схемой таблиц - Data Mapper следует за схемой маппинга - Выбор Active Record ORM гораздо шире (написать AR проще) 21
  • 22. 22 Active Record Data MapperHybrid
  • 23. 23 Active Record Data MapperHybrid
  • 24. 24 Active Record Data MapperHybrid
  • 27. Что необходимо для ORM? - Database Abstraction Layer (DBAL) - интроспекция, рефлексия - Query Builder, Query DSL, любой другой механизм выборки 27
  • 28. Что необходимо для ORM? - Database Abstraction Layer (DBAL) - интроспекция, рефлексия - Query Builder, Query DSL, любой другой механизм выборки - EntityMap/Heap для хранения объектов и их связей - Mapping schema 28
  • 29. Что необходимо для ORM? - Database Abstraction Layer (DBAL) - интроспекция, рефлексия - Query Builder, Query DSL, любой другой механизм выборки - EntityMap/Heap для хранения объектов и их связей - Mapping schema - Persist слой - Различные типы связей 29
  • 30. Что необходимо для ORM? - Database Abstraction Layer (DBAL) - интроспекция, рефлексия - Query Builder, Query DSL, любой другой механизм выборки - EntityMap/Heap для хранения объектов и их связей - Mapping schema - Persist слой - Различные типы связей - Тесты... очень много тестов 30
  • 31. Persist и графы зависимостей 3 1
  • 32. Требование к persist слою - Топологическая сортировка объектов и их связей - Оптимальное число запросов 32
  • 33. Требование к persist слою - Топологическая сортировка объектов и их связей - Оптимальное число запросов - Переносимые транзакции и легкое тестирование - Корректная обработка ошибок 33
  • 34. Требование к persist слою - Топологическая сортировка объектов и их связей - Оптимальное число запросов - Переносимые транзакции и легкое тестирование - Корректная обработка ошибок - Отсутствие утечек памяти (RoadRunner) - Возможность работы с несколькими базами одновременно 34
  • 35. Требование к persist слою - Топологическая сортировка объектов и их связей - Оптимальное число запросов - Переносимые транзакции и легкое тестирование - Корректная обработка ошибок - Отсутствие утечек памяти (RoadRunner) - Возможность работы с несколькими базами одновременно - Динамический маппинг модели к нескольким таблицам (hi, Drupal!) 35
  • 36. Граф зависимостей 36 - Ориентированный граф - Вершины - доменные сущности - Ребра - связи между сущностями - Типы графов в ORM: - Направленный ациклический - Направленный граф-цикл
  • 37. Граф с циклами 37 - Ориентированный граф - Вершины - доменные сущности - Ребра - связи между сущностями - Типы графов в ORM: - Направленный ациклический - Направленный граф-цикл
  • 38. 38 Топологическая сортировка в Doctrine - InternalCommitOrderCalculator - Поиск в глубину (DFS) - Сортировка предшествует сохранению - Сортируем ClassMetadata - Вызываем Persister в порядке сортировки - Выполняем расчеты внутри EntityMap
  • 39. 39 Persist в Doctrine - computeChangeSets - assertThatThereAreNoUnintentionallyNonPersistedAssociations - orphanRemovals - getCommitOrder - collectionDeletions, entityInsertions, entityUpdates, extraUpdates, collectionUpdates, entityDeletions - события и хуки - Около 4 тысяч строк кода :(
  • 41. 41 Поиск в глубину (DFS) vs поиск в ширину (BFS)
  • 42. 42 DFS + ❤ + BFS = IDDFS - Итеративный поиск в глубину - Преобразуем граф объектов в граф операций - Ищем первую операцию без зависимостей по цепочке - Объединяем поиск и persist в один процесс
  • 43. 43 Реализация в коде - Команда - Вершина - команда - Ребро - зависимость - Агрегирующие команды
  • 44. 44 Реализация в коде - Зависимость - Проброс значения по цепочке - Зависимость - ожидание значения - Одновременно уточняем финальные данные
  • 45. 45 Простой пример - Команда зависит от значения другой команды - “Обещаем” значение через зависимость - Пробрасываем значения по цепочке при выполнении команды
  • 46. 46 Реализация в коде - Транзакция - Команда - Узлы - агрегирующие команды - Новые данные гидрируют модели после окончания транзакции
  • 54. 54 Что в итоге - Persist графов любой сложности - Сортировка и транзакция один процесс - Связи между любыми ключами, любыми базами - Persist изолирован от доменных моделей и entity map
  • 56. 56 Поддержка нескольких баз данных - MySQL, SQLite, MariaDB, SQLServer 12+, Postgres 9.2+ - Логическая изоляция баз данных - Общая транзакция - Read/write соединения - Авто-переподключение - Авто-миграции - Под капотом PDO
  • 57. 57 Загрузка связанных данных - Загрузка данных любой вложенности - Несколько стратегий выборки - Сложные запросы и фильтрация
  • 58. 58 Построение сложных запросов - Поддержка вложенных запросов - Запросы на чистом SQL - Использование данных нескольких связей одновременно
  • 59. 59 Описываем схему вручную - Маппинг схема описывает все поведение - Можно изменять в runtime - Можно описывать используя декларативный билдер схем
  • 60. 60 Либо используя аннотации - На основе Doctrine Annotation - Есть autocomplete
  • 61. 61 Локальные транзакции - Несколько UoW в одном приложении - Абстракция с тремя методами - Каскадное сохранение - Простое тестирование
  • 62. 62 Lazy-loaded Embeddings - Загружаем только нужные части объекта - При необходимости, используем lazy-load - Embeddings ведут себя как обычные связи - Выбираем embedding отдельно от родителя
  • 63. 63 Динамическая схема сущностей (hi Drupal nodes!) - Описываем схему в runtime - Конфигурируем базу данных используя декларативные схемы - Храним схему в JSON прямо в базе
  • 64. 64 Динамическая схема сущностей (hi, Drupal nodes!) - Описываем маппинг схему в runtime - Без или с кодо-генерацией - Описываем связи, генерируем запросы - Смешиваем с обычными моделями
  • 65. 65 Динамическая схема сущностей (hi Drupal nodes!) - Описываем маппинг схему в runtime - Без или с кодо-генерацией - Описываем связи, генерируем запросы - Смешиваем с обычными моделями
  • 67. 67 CYCLE-ORM.DEV - 4-е поколение ORM - В 8 раз меньше Doctrine 2 - 94% покрытие тестами, 92% MSI - Spiral Framework и Yii 3 - Официальная поддержка Spiral Scout
  • 68. 68 Недостатки - Новая ORM - Небольшое комьюнити - Отсутствуют коробочные интеграции в большинство фреймворков - Есть большой запас для оптимизаций - Пока нет поддержки композитных ключей (но мы работаем над этим!)
  • 69. 69 Спасибо за внимание Ссылки: - https://github.com/doctrine/orm/blob/master/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php - https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/limitations-and-known-issues.html - https://en.wikipedia.org/wiki/Depth-first_search - https://en.wikipedia.org/wiki/Breadth-first_search - https://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search - https://www.geeksforgeeks.org/iterative-depth-first-traversal/ - https://cycle-orm.dev/docs - https://github.com/cycle/orm - https://github.com/cycle/docs/issues/3 (сравнение с Doctrine 2 и Eloquent) - https://github.com/yiisoft/yii-cycle