ORM: как писать запросы и не сводить с ума СУБД
Многие специалисты, обслуживающие СУБД не любят эти три буквы - ORM, потому что не раз видели сгенерированные многоэтажные запросы для простейших операций. Однако, практика показывает, что источник проблемы - не ORM, а разработчики, не умеющие ими пользоваться. В этом докладе я расскажу основные принципы, как писать код для ORM, генерирующий «хорошие» запросы, а также покажу «плохие» примеры кода, и что из них получается на выходе. Основные идеи – при написании кода мыслить в SQL, научиться заранее видеть, какой запрос будет сгенерирован. Но даже обретя такой навык нужно всегда проверять выходной SQL для сложных запросов. Приведу конкретный пример, когда незначительное изменение в ORM-логике меняет объём выходного SQL в десятки(!) раз. Расскажу о дополнительных инструментах и хитростях. А именно – отключение трекинга, конструкция Include, разный синтаксис для JOIN, как получить больше данных за меньшее число запросов, как эффективно писать запросы с группировкой, и зачем нужны проекции. Не обойду стороной и случаи, когда эффективно решить задачу средствами ORM не получается (например, запросы с рекурсией). Кроме SELECT-запросов немного расскажу о средствах Batch-Update/Delete, позволяющих обновлять и удалять данные средствами ORM без загрузки на клиент. Несколько слов будет и о вставке – как заставить ORM быстро вставлять большие объёмы данных через Multi-Insert и COPY. Будет упомянуто и о поддержке в ORM специфичных для PostgreSQL типов данных – массивов, hstore и jsonb. Может возникнуть вопрос – а есть ли вообще смысл использовать ORM, раз нужно столькому научиться. Преимущества их использования есть, и об этом тоже будет сказано. Все примеры будут на технологии Entity Framework для платформ .Net Core и .Net Framework на языке C#. Для Hibernate/NHibernate могут быть отличия в некоторых тонкостях, но основные принципы те же, поэтому доклад будет полезен разработчикам, использующим различные технологии.
Слайды
Видео
Другие доклады
-
Мирослав Шедиви solute GmbH Senior Software Developer
Битемпоральность: отслеживание воспроизводимых изменений в PostgreSQL с помощью типа данных RANGE
Итак, вы наконец создали модель базы данных для вашего приложения и наполнили ее текущими данными. Каким образом обеспечить их актуальность? Хотя команда INSERT может быть все еще прозрачной, команды UPDATE и DELETE перезапишут ваши предыдущие данные, так что вы не сможете их воспроизвести. Клонирование целиком огромного контента при каждом небольшом обновлении - не вариант. Для богатых и сложных данных о сотнях тысяч электрогенераторов в Германии и по всему миру я построил базу данных, используя тип данных range, недавно появившийся в PostgreSQL. Это позволило мне добавлять, обновлять и удалять данные, при том обладая полным доступом к состоянию базы данных в любой исторический момент. Во время выступления я представлю очень упрощенную версию базы данных, чтобы аудитория смогла тут же применить знания на практике. Также я покожу несколько хитрых приемов в работе с Python и Psycopg2, которые позволят всей команде подготавливать, просматривать и развертывать все изменения в базе данных без конфликтов слияния. И подкину несколько идей о том, как можно эти данные эффективно извлекать.
-
Андрей Бородин Яндекс Разработчик
DIY индекс
В докладе я расскажу об актуальных технологиях в области индексов общего назначения в РСУБД. Обсудим различные подходы, делающие индексы быстрее для различных типов нагрузки. Поговорим о том, какие вещи приходят к нам из академических исследований и какие находят отклик среди разработчиков, со стороны сообществ и крупных компаний. Будет небольшая live-код сессия по созданию DIY индекса в PostgreSQL.
-
Дорофей Пролесковский Juno GIS Engineer
PostGIS от катастроф
PostGIS - расширение PostgreSQL для обработки пространственных данных.
В этом докладе будет подробно рассмотрено, какие его функции и как применять для работы с информацией о катаклизмах.
-
Андрей Бородин Яндекс Разработчик
Резервные копии с WAL-G. Что там в 2019?
Доклад будет состоять из 3 частей: 1. Экспресс-настройка PITR в Облако 2. Последние доработки бекапостроения в WAL-G 3. Почему это может быть нужно или вредно для вашего типа требований и нагрузки.