ШБР 2023 - Работа с БД из приложения и миграции (Python)

  Рет қаралды 8,715

Young&&Yandex: бэкенд-разработка

Young&&Yandex: бэкенд-разработка

Күн бұрын

Пікірлер: 8
@tatyanaderbysheva4317
@tatyanaderbysheva4317 Жыл бұрын
Интересная лекция, очень приятный лектор. Эпическая презентация, около 150 слайдов. Слушается очень легко. Прилагаю тайминг первой половины. 4:24 О чем будем говорить 1. Как выбирать реляционную БД 5:04 2. Клиент-серверный протокол Postgres 22:40 3. Драйверы 51:05 4. Работа с данными, курсором, транзакциями 1:10:30 5. QueryBuilder 1:33:20 6. ORM 1:51:47 7. Миграции, тестирование 2:08:33 8. Масштабирование и отказоустойчивость 5:04 Критерии выбора СУБД Обзор СУБД: 8:49 MySQL 11:07 MariaDB 13:40 Postgres (выбор сегодняшней лекции) 15:55 SQLite 18:41 Clickhouse 22:40 - клиент-серверный протокол Postgres протокол простых запросов 36:21 протокол расширенных запросов 46:21 - вопрос про выбор протокола 47:24 - вопросы слушателей 50:40 ответ на впрос про выбор протокола 51:05 Драйверы Синхронные: psycopg2 psycopg(3) pg8000 Асинхронные: aiopg psycopg(3) asyncpg 56:33 psycopg2 - протокол простых запросов, экранирует DML и DDL на стороне клиента, используется по умолчанию в SQLAlchemy и Django(?). 57:55 aiopg - обертка над pycopg2, протокол простых запросов, не поддерживает SQLAlchemy напрямую, но может использовать ее как QueryBuilder. 59:45 psycopg(3) - оба протокола запросов Postgres, поддерживается SQLAlchemy и Django, удобный интерфейс для COPY, пулы соединений в psycopg_pool. 1:01:06 asyncpg - быстрый, протокол расширенных запросов, 1:03:05 pg8000 - написан на чистом питоне (медленный), совместим с PyPy и Jython, оба протокола запросов. 1:05:00 контрольные вопросы 1:10:30 Cursor 1:20:00 Вопросы по курсорам, select+limit+offset существенно медленнее, чем добывать из курсора 1:20:48 Транзакции 1:26:50 save point 1:27 вопросы про транзакции (вопросов нет) 1:27:55 4.3 Работа с данными 1:28:00 RETURNING - Позволяет получить данные из модифицируемых строк в процессе их обработки в запросах INSERT, UPDATE, DELETE 1:29:00 UPSERT: insert или update - указывает действие, выполняемое в случае нарушения ограничения уникальности или ограничения-исключения 1:31:48 SELECT FOR UPDATE - защищает выбранные строки от блокировки, изменения и удаления другими транзакциями до завершения текущей 1:32 COPY FROM, COPY TO 1:33:20 5. QUERY Builder (SQLAlchemy - о ней, Django - не рассматриваем) SQLAlchemy - гибкая, есть асинхронный ORM, из коробки 1:38:37 Основные компоненты SQLAlchemy MetaData - контейнер, содержит информацию о схеме БД: таблицах, индексах, типах данных и тп. Table - содержит описание таблиц. Для того, чтобы алхимия могла генерировать запросы, ей требуется информация о таблицах (названия, типы столбцов и тп) 1:41:47 MetaData, Table, запросы - код 1:45:54 SQLAlchemy и асинхронный код - Core (QueryBuilder) можно использовать отдельно в качестве генератора запросов с асинхронными драйверами (aiopg для psycopg2 и asyncpgsa для asyncpg) - Можно использовать алхимию целиком (с драйверами asyncpg и psycopg). Тогда будет использоваться пул соедениений алхимии и вся ее объектная модель. - Внутри алхимии провязка реализована через greenlet (аналог coroutine) 1:48:05 Вопросы по QueryBuilder 1:51:47 6. ORM Приложение / Модели / QueryBuilder / Драйвер БД ORM - object relational mapping * Абстракция высокого уровня, позволяет работать с данными с использованием объектно-ориентированной парадигмы. * Позволяет размещать всю логику (методы, константы), связанную с сущностью, в ее классе. 1:53:04 Declarative SQLAlchemy ORM * С помощью метакласса создает объект класса Table, связывает поля объекта со столбцами таблицы (Mapper), добавляет ссылку на объект MetaData. * Для синхронизации состояния объектов в базе данных и объектной модели используется специальный объект Session. 1:55:56 как работать с таблицами ORM 1:58:13 Вопросы по ORM (нет)
@vkg1
@vkg1 8 ай бұрын
Легенда
@dima5116
@dima5116 Жыл бұрын
Спасибо за лекцию, очень информативно и по полочкам. На подробное изучение с конспектом ушло порядка 8 часов
@hentan4912
@hentan4912 Жыл бұрын
Интересная лекция и респект лектору, чувствуется, что человеку нравится питон))
@RozaNevroza
@RozaNevroza Жыл бұрын
Пока это лучшая лекция, спасибо!
@palms1990
@palms1990 Жыл бұрын
1:31:35 upsert работает только на поля, на которых есть ограничения уникальности. В 15 postgres наконец-то появилось команда merge, которая позволяет сделать upsert на основе набора фильтров по нескольким полям, если у них нет уникальности. Хотя и до merge это можно было бы сделать через cte
@tatyanaderbysheva4317
@tatyanaderbysheva4317 Жыл бұрын
Продолжение тайминга лекции после перерыва 1:58:35 ПЕРЕРЫВ 2:08:33 7.1 Миграции * Атомарность - миграция (или группа миграций) должна быть применена полностью, или никак. * Обратимость - миграциия должна содержать код, который позволит вернуться к предыдущему состоянию. * Упорядоченность - должно быть понятно, в каком порядке нужно применять миграции, какую катить следующей. Alembic: * Построен поверх SQLAlchemy * Умеет генерировать код миграций, используя объект MetaData * Позволяет писать сложную бизнес-логику без каких-либо ограничений. * Режимы Alembic: * онлайн - можно выполнять запросы, * офлайн - генерирует SQL файл, который можно выполнить позже. 2:11:27 Как начать использовать Alembic $alembic init alembic После выполнения будут созданы файлы: alembic/env.py alembic/script.py.mako - шаблон (jinja - ещё одна известная библиотека шаблонов, mako - другая) alembic/versions/ alembic.ini 2:21:00 Как и когда применять миграции? * Если приложение on-premises или доступ к нему ограничен, можно и нужно накатывать миграции автоматически, например, при запуске приложения. * Если у вас важный сервис, к которому есть доступ - накатывание миграций вручную дает больший контроль и позволяет оперативно реагировать на проблемы. 2:23:29 Как быть с необратимыми изменениями? * Если вам больше не нужна таблица или столбец и вы хотите их удалить без возможности восстановить данные, не стоит их удалять сразу. При автоматическом накате миграций это правило должно строго выполняться. Потому что не откатиться назад. * Убрать все обращения к ресурсам в коде, как будто их не существует. * Столбцы/таблицы/типы данных можно пометить специальным декоратором, который будет сообщать о доступе к ресурсам, которые должны быть удалены. В алхимии есть. * Поставить задачу в бэклог на следующее удаление. 2:25:25 Batch-операции. Это фишка Alembic и она нужна преимущественно для работы с SQLite. * SQLite поддерживает ограниченное подмножество Alter Table: переименовывание таблиц, добавление/переименовывание/удаление столбцов. * Alembic предоставляет batch-режим, который: * создает новую таблицу на основе описания миграции с временным именем, * копирует данные в новую таблицу из существующей, * существующая таблица удаляется, * новая таблица переименовывается в существующее имя таблицы. 2:26:20 О чем стоит помнить * Менять данные на стороне python медленно. Лучше писать запросы, которые Alembic может выполнить на стороне postgres. * Если требуемые операции реализовать на стороне postgres невозможно, используйте пагинацию. * Добавление поля в Postgres без значения по умолчанию - очень быстро, С умолчанием - очень медленно. Добавление столбца без значения по умолчанию + добавление умолчания работает в итоге быстрее. * Создание индексов на таблицах в режиме CONCURRENTLY может помочь избежать блокировок (но может работать существенно дольше). 2:28:55 Вопросы по миграциям (нет) 2:29:30 7. Тестирование миграций 2:32:46 Stairway тест: каждую миграцию применяет, откатывает, применяет, переходит к следующей. дальше кто-то другой пусть тайминги оставляет. Жаль, что не выкладывают презентацию. Огромное спасибо лектору за великолепную лекцию.
@valeriyemelyanov9090
@valeriyemelyanov9090 Жыл бұрын
"MS SQL может составить конкуренцию MySQL" - однако
ШБР 2023 - Тестирование (Python)
2:00:51
Young&&Yandex: бэкенд-разработка
Рет қаралды 4,5 М.
Андрей Сальников - Индексы в PostgreSQL. Как понять, что создавать
2:00:45
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 58 М.
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН
Quando eu quero Sushi (sem desperdiçar) 🍣
00:26
Los Wagners
Рет қаралды 15 МЛН
So Cute 🥰 who is better?
00:15
dednahype
Рет қаралды 19 МЛН
ШБР 2023 - Работа с БД из приложения и миграции (Java)
1:26:15
Young&&Yandex: бэкенд-разработка
Рет қаралды 3,4 М.
ШБР 2023 - Нагрузочное тестирование. Часть 1
1:18:04
Young&&Yandex: бэкенд-разработка
Рет қаралды 8 М.
ШБР 2023 - Безопасность
1:00:27
Young&&Yandex: бэкенд-разработка
Рет қаралды 3,3 М.
Вложил 900тр. в ВАЗ 21099, а она не едет :(
1:26:39
ИЛЬДАР АВТО-ПОДБОР
Рет қаралды 1 МЛН
Рустам Ахметов - Архитектура приложения и ошибки проектирования
49:19
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 31 М.