Slide 1

Slide 1 text

Без ORM Иван Гришаев, 2017

Slide 2

Slide 2 text

Википедия is a technique for converting data between incompatible type systems using object-oriented programming languages.

Slide 3

Slide 3 text

ORM, например

Slide 4

Slide 4 text

Что дает — абстракция над БД — упрощает процесс разработки — объектность™

Slide 5

Slide 5 text

В реальности — абстракции (чаще всего) зло — база меняется редко (и болезненно) — коллекции > объекты

Slide 6

Slide 6 text

SQL — создан до ООП — декларативный — не-Тьюринг полный — решает задачи

Slide 7

Slide 7 text

Задача о переводе SQL в объекты... — неразрешима в принципе! — сравнима с трансляцией языков

Slide 8

Slide 8 text

Примерная сложность SEL/INS/UPD/DEL + (на этом пора заканчивать) INNER/LEFT JOIN ++ WITH RECURSIVE ++++ JSON(b) ++++++++ GIS ++++++++++++++ FULLTEXT SEARCH ++++++++++++++++++++++++++++ ...

Slide 9

Slide 9 text

Проблемы — ORM системы сложны — внутренние API не документированы — не спасают от raw SQL

Slide 10

Slide 10 text

Боязнь raw SQL — доменный язык (как HTML, CSS) — ООП-код растет — неэффективная работа с БД

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Эти ваши объекты

Slide 14

Slide 14 text

К чему приводит ORM — Боязнь (незнание) SQL — Хрупкость базы — Лишний ОО-код — ORM-specific bugs

Slide 15

Slide 15 text

К чему приводит ORM — Зависимость — Нечитаемые запросы — Трудно понять, что на выходе

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

А если будет тормозить? — Сперва добейся! — Конфигурация — Железо — Меньше кода

Slide 21

Slide 21 text

Вам не нужны объекты — опасные property — нужны удобные структуры — и функции для работы с ними — Clojure, Go, Rust

Slide 22

Slide 22 text

Что предлагаешь? — Построители запросов — Запросы из структур данных — SQL-шаблоны — Генерация функций

Slide 23

Slide 23 text

Построители запросов

Slide 24

Slide 24 text

Запросы из структур данных

Slide 25

Slide 25 text

SQL templates

Slide 26

Slide 26 text

Наш проект — PostgreSQL, JDBC/Clojure — 70 таблиц — до 15 join-ов в запросах — GIS, JSONb — рекурсивные запросы

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

SQL templates

Slide 29

Slide 29 text

HugSQL, YeSQL — Один *.sql файл — Clojure, JS, Python, PHP, Perl, Go, C#, Erlang, Ruby

Slide 30

Slide 30 text

Конец — Вопросы?