Курс «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 155,22
    Российский вендор 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.

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

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

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