Привет всем!


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

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



Мы специально анонсируем курс заранее, чтобы подготовить лекции с учетом ваших комментариев. А ещё потому, что есть предварительные требования:
  • 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.
Предложения и пожелания оставляйте в комментариях.

UPD:
Курс будет открытым и бесплатным. Возможны ограничения только по вместимости аудиторий. Поэтому, записывайтесь заранее, чтобы мы могли оценить реальное количество желающих.
Записаться можно здесь

Комментарии (13)


  1. maxru
    22.12.2015 13:20
    +3

    А где можно подписаться?


    1. lubennikovaav
      22.12.2015 15:22
      +1

      Спасибо за вопрос. В конце поста добавлена ссылка на форму записи.


  1. vdmitriyev
    22.12.2015 13:49
    +6

    А где можно будет мониторить появление видеозаписей и материалов лекций?


    1. LarisaPostgres
      22.12.2015 17:09
      +1

      Мы планируем обновить сайт и выкладывать материалы в соответствующий раздел. В любом случае, об этом обязательно напишем, вместе с анонсом итоговой программы курса, ближе к февралю.
      А всем, кто заполнит форму регистрации (ссылка на нее появилась в апдейте поста), разошлем персональное уведомление.


      1. vdmitriyev
        22.12.2015 18:52

        Спасибо за ответ. О каком именно сайте идет речь? Вы имеете ввиду — pgconf.ru?


        1. LarisaPostgres
          23.12.2015 13:01
          +1

          На сайте конференции www.pgconf.ru мы разместим видео и слайды прошедших докладов (как это было сделано, например, для PGConf.RU 2015), доклад Анастасии Лубенниковой там тоже будет.

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


  1. terrier
    22.12.2015 14:46
    +2

    Вот, отличная идея. Спасибо!


  1. brainick
    22.12.2015 14:47

    Курс на Stepic.org лучше сделайте.


    1. stalkerg
      22.12.2015 15:11

      Боюсь тут слишком много теории для stepic…


  1. afiskon
    22.12.2015 14:53
    +1

    Вопрос, который будоражит умы миллионов — будет ли прямая трансляция? Желательно с возможностью задавать вопросы через email, твиттер по хэштэгу или еще как-то. Насколько я понимаю, это сейчас не сложно реализовать — берем камеру (все равно будете на что-то записывать же), YouTube и вперед.


    1. LarisaPostgres
      22.12.2015 17:06

      Если наберется достаточное количество желающих, то будет. Выбрать «хочу онлайн трансляцию» можно в форме регистрации, сразу под постом автор добавила апдейт со ссылкой на форму.


  1. funca
    22.12.2015 22:18

    и что на самом деле меняют настройки памяти в postgresql.conf.

    Иногда складывается впечатление, что они меняют расположение звёзд на небе, или фазу Луны. ;)


    1. stalkerg
      23.12.2015 14:33
      +1

      lubennikovaav у нас главный звездочёт.