Курс «Hacking PostgreSQL» — уже скоро

в 9:36, , рубрики: postgres, postgresql, базы данных, Блог компании Postgres Professional

Привет всем!

Сегодня я рада анонсировать курс “Hacking PostgreSQL” из 16 занятий, на которых мы вместе будем исследовать особенности архитектуры открытой СУБД и вносить изменения на уровне исходного кода. Курс будет проходить в Москве, на площадке компании Postgres Professional. Начало курса запланировано на февраль 2016 года. Лекции начнутся сразу после февральской конференции pgconf.ru и будут проходить один раз в неделю вечером. Видеозаписи и материалы лекций мы будем выкладывать по мере обработки.

Курс собран из личного опыта разработчиков нашей компании, материалов с конференций, статей и вдумчивого чтения документации и исходников. В первую очередь он адресован начинающим разработчикам ядра PostgreSQL. Но он будет интересен и DBA, которым иногда приходится влезать в код, и просто всем неравнодушным к архитектуре большой системы, желающим узнать “А как это работает на самом деле?”

Курс «Hacking PostgreSQL» — уже скоро - 1

Мы специально анонсируем курс заранее, чтобы подготовить лекции с учетом ваших комментариев. А ещё потому, что есть предварительные требования:

  • SQL. Специфических знаний не требуется, но вы должны быть в курсе как со стороны SQL работают индексы, транзакции и так далее. Материалы на выбор: PostgreSQL Tutorial и SQL Tutorial
  • С. Будет много кода. Если вы хотите просто посмотреть, достаточно уметь его читать. А вот для того, чтобы выполнять практические задания, лучше освежить знания. Например, по этому курсу Practical Programming in C
  • Базовые структуры данных и алгоритмы. Можно почитать здесь и посмотреть курс здесь.

Мы хотим создать открытую базу знаний о внутреннем устройстве СУБД на примере PostgreSQL. Надеемся, что жаркие дискуссии с администраторами выйдут на новый уровень взаимопонимания, а пользователи с разработчиками наконец смогут говорить на одном языке. А ещё при подготовке курса мы перечитываем код, исправляем мелкие недочеты и устаревшие комментарии и находим интересные задачи, которые можно добавить в TODO.

Нельзя объять необъятное, особенно за 16 занятий. Хотя мы очень старались. В итоге программа курса получилась такой:

1. Обзор архитектуры

Первая лекция призвана дать общее представление о подсистемах PostgreSQL и их связи, а также кратко определить термины, которые мы будем использовать в следующих лекциях.

2. Сообщество PostgreSQL и инструменты разработчика

Лирическое отступление о том, как устроено сообщество PostgreSQL, как координируется международная разработка, какие шаги нужно пройти, чтобы ваш патч приняли, и некоторые полезные мелочи, которые пригодятся начинающему разработчику ядра. А также обзор инструментов, которыми нужно уметь пользоваться.

3. Расширяемость

В третьей лекции пошагово разобрано создание своего расширения (contrib). Это самый простой и естественный способ приобщиться к разработке и добавить в PostgreSQL новую функциональность. Кроме этого, будет рассмотрена внутренняя расширяемость постгреса на примере добавления нового типа данных.

4. Обзор исходного кода

В этой лекции мы проследим путь выполнения различных запросов от получения текста запроса до выдачи результата.

5. Особенности кода

Для того, чтобы понимать исходный код системы, а тем более развивать его, нужно познакомится с принятыми соглашениями. В этой лекции пойдет речь о типе данных Datum, обработке объектов переменной длины, различных макросах и соглашениях о вызовах функций (calling conventions).

6. Системный каталог

В системном каталоге содержатся метаданные обо всех объектах системы. Кроме информации о пользовательских таблицах, функциях и триггерах, в нём также хранятся сведения о типах данных, операторах и методах доступа к ним, и многое другое. В лекции приведен обзор основных таблиц каталога и интерфейс взаимодействия с ними.

7. Физическое представление данных

После этой лекции вы будете знать, как уложены атрибуты в строке, строки на странице, страницы в таблице, а таблицы в базе. А также то, как Postgres справляется с выравниванием данных и хранением больших атрибутов. Это поможет увидеть некоторые ограничения архитектуры и понять (а может и придумать новые) приемы проектирования оптимальной схемы БД.

8. Работа с памятью

Для удобства и эффективности работы с памятью вместо стандартных функций языка С (malloc/free), в PostgreSQL используются их аналоги palloc/pfree. В этой лекции речь пойдет о том, как устроены контексты памяти, как правильно использовать их в коде, и какие ситуации могут привести к неожиданно большому потреблению памяти.

9. Разделяемая память и блокировки

Из этой лекции вы узнаете, как устроен менеджер памяти в PostgreSQL, сколько разных видов блокировок используется, чтобы параллельные транзакции работали правильно, и что на самом деле меняют настройки памяти в postgresql.conf.

10. Nodes & Trees

Информация об SQL запросе в PostgreSQL содержится в структурах типа Node. Они используются в качестве узлов дерева запросов (Query tree), в деревьях разбора (Parse tree) и планировщика (Plan tree). В этой лекции мы рассмотрим основные типы узлов и разберем алгоритмы работы упомянутых деревьев.

11. Патч ядра PostgreSQL

12. Отладка. Тестирование функциональности и производительности

В лекции мы поговорим об инструментах отладки и тестирования, с помощью которых можно исследовать PostgreSQL. А ещё о том, как прекратить сравнивать теплое с мягким и начать правильно тестировать производительность.

13. Транзакции. MVCC и VACUUM

14. WAL. И восстановление, и репликация

WAL, он же Write-Ahead Log, он же журнал опережающей записи. В этой лекции мы постараемся рассказать самое полезное о его формате, использовании и настройках.

15. Индексы

Рассказ о том, как устроены разные типы индексов в PostgreSQL, рассуждения о структурах данных, советы по эффективному использованию и поддержанию индексов. А также приглашение к дискуссии с разработчиками о перспективах и новых идеях развития.

16. Тенденции развития СУБД в целом и PostgreSQL в частности

Заключительная лекция этого курса, на которой мы обсудим перспективы развития PostgreSQL. Разные виды кластеров, column storage, in-memory структуры, параллельная обработка запросов, хинты, пространственные данные и другие интересные задачи, которые слишком масштабны для этого курса.

Координировать и читать этот курс буду я, Анастасия Лубенникова, разработчик ядра PostgreSQL.
Предложения и пожелания оставляйте в комментариях.

Автор: Postgres Professional

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js