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

    Привет всем!


    Сегодня я рада анонсировать курс “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:
    Курс будет открытым и бесплатным. Возможны ограничения только по вместимости аудиторий. Поэтому, записывайтесь заранее, чтобы мы могли оценить реальное количество желающих.
    Записаться можно здесь
    Postgres Professional 131,75
    Российский вендор PostgreSQL
    Поделиться публикацией
    Похожие публикации
    Комментарии 13
    • +3
      А где можно подписаться?
      • +1
        Спасибо за вопрос. В конце поста добавлена ссылка на форму записи.
      • +6
        А где можно будет мониторить появление видеозаписей и материалов лекций?
        • +1
          Мы планируем обновить сайт и выкладывать материалы в соответствующий раздел. В любом случае, об этом обязательно напишем, вместе с анонсом итоговой программы курса, ближе к февралю.
          А всем, кто заполнит форму регистрации (ссылка на нее появилась в апдейте поста), разошлем персональное уведомление.
          • 0
            Спасибо за ответ. О каком именно сайте идет речь? Вы имеете ввиду — pgconf.ru?
            • +1
              На сайте конференции www.pgconf.ru мы разместим видео и слайды прошедших докладов (как это было сделано, например, для PGConf.RU 2015), доклад Анастасии Лубенниковой там тоже будет.

              А материалы обучающего курса, который анонсирован здесь, мы будем выкладывать на сайте нашей компании www.postgrespro.ru, как раз сейчас занимаемся его новой версией.
        • +2
          Вот, отличная идея. Спасибо!
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Боюсь тут слишком много теории для stepic…
            • +1
              Вопрос, который будоражит умы миллионов — будет ли прямая трансляция? Желательно с возможностью задавать вопросы через email, твиттер по хэштэгу или еще как-то. Насколько я понимаю, это сейчас не сложно реализовать — берем камеру (все равно будете на что-то записывать же), YouTube и вперед.
              • 0
                Если наберется достаточное количество желающих, то будет. Выбрать «хочу онлайн трансляцию» можно в форме регистрации, сразу под постом автор добавила апдейт со ссылкой на форму.
              • 0
                и что на самом деле меняют настройки памяти в postgresql.conf.

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

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое