- PVSM.RU - https://www.pvsm.ru -
Сегодня я рада анонсировать курс “Hacking PostgreSQL” из 16 занятий, на которых мы вместе будем исследовать особенности архитектуры открытой СУБД и вносить изменения на уровне исходного кода. Курс будет проходить в Москве, на площадке компании Postgres Professional. Начало курса запланировано на февраль 2016 года. Лекции начнутся сразу после февральской конференции pgconf.ru [1] и будут проходить один раз в неделю вечером. Видеозаписи и материалы лекций мы будем выкладывать по мере обработки.
Курс собран из личного опыта разработчиков нашей компании, материалов с конференций, статей и вдумчивого чтения документации и исходников. В первую очередь он адресован начинающим разработчикам ядра PostgreSQL. Но он будет интересен и DBA, которым иногда приходится влезать в код, и просто всем неравнодушным к архитектуре большой системы, желающим узнать “А как это работает на самом деле?”
Мы специально анонсируем курс заранее, чтобы подготовить лекции с учетом ваших комментариев. А ещё потому, что есть предварительные требования:
Мы хотим создать открытую базу знаний о внутреннем устройстве СУБД на примере PostgreSQL. Надеемся, что жаркие дискуссии с администраторами выйдут на новый уровень взаимопонимания, а пользователи с разработчиками наконец смогут говорить на одном языке. А ещё при подготовке курса мы перечитываем код, исправляем мелкие недочеты и устаревшие комментарии и находим интересные задачи, которые можно добавить в TODO.
Нельзя объять необъятное, особенно за 16 занятий. Хотя мы очень старались. В итоге программа курса получилась такой:
Первая лекция призвана дать общее представление о подсистемах PostgreSQL и их связи, а также кратко определить термины, которые мы будем использовать в следующих лекциях.
Лирическое отступление о том, как устроено сообщество PostgreSQL, как координируется международная разработка, какие шаги нужно пройти, чтобы ваш патч приняли, и некоторые полезные мелочи, которые пригодятся начинающему разработчику ядра. А также обзор инструментов, которыми нужно уметь пользоваться.
В третьей лекции пошагово разобрано создание своего расширения (contrib). Это самый простой и естественный способ приобщиться к разработке и добавить в PostgreSQL новую функциональность. Кроме этого, будет рассмотрена внутренняя расширяемость постгреса на примере добавления нового типа данных.
В этой лекции мы проследим путь выполнения различных запросов от получения текста запроса до выдачи результата.
Для того, чтобы понимать исходный код системы, а тем более развивать его, нужно познакомится с принятыми соглашениями. В этой лекции пойдет речь о типе данных Datum, обработке объектов переменной длины, различных макросах и соглашениях о вызовах функций (calling conventions).
В системном каталоге содержатся метаданные обо всех объектах системы. Кроме информации о пользовательских таблицах, функциях и триггерах, в нём также хранятся сведения о типах данных, операторах и методах доступа к ним, и многое другое. В лекции приведен обзор основных таблиц каталога и интерфейс взаимодействия с ними.
После этой лекции вы будете знать, как уложены атрибуты в строке, строки на странице, страницы в таблице, а таблицы в базе. А также то, как Postgres справляется с выравниванием данных и хранением больших атрибутов. Это поможет увидеть некоторые ограничения архитектуры и понять (а может и придумать новые) приемы проектирования оптимальной схемы БД.
Для удобства и эффективности работы с памятью вместо стандартных функций языка С (malloc/free), в PostgreSQL используются их аналоги palloc/pfree. В этой лекции речь пойдет о том, как устроены контексты памяти, как правильно использовать их в коде, и какие ситуации могут привести к неожиданно большому потреблению памяти.
Из этой лекции вы узнаете, как устроен менеджер памяти в PostgreSQL, сколько разных видов блокировок используется, чтобы параллельные транзакции работали правильно, и что на самом деле меняют настройки памяти в postgresql.conf.
Информация об SQL запросе в PostgreSQL содержится в структурах типа Node. Они используются в качестве узлов дерева запросов (Query tree), в деревьях разбора (Parse tree) и планировщика (Plan tree). В этой лекции мы рассмотрим основные типы узлов и разберем алгоритмы работы упомянутых деревьев.
В лекции мы поговорим об инструментах отладки и тестирования, с помощью которых можно исследовать PostgreSQL. А ещё о том, как прекратить сравнивать теплое с мягким и начать правильно тестировать производительность.
WAL, он же Write-Ahead Log, он же журнал опережающей записи. В этой лекции мы постараемся рассказать самое полезное о его формате, использовании и настройках.
Рассказ о том, как устроены разные типы индексов в PostgreSQL, рассуждения о структурах данных, советы по эффективному использованию и поддержанию индексов. А также приглашение к дискуссии с разработчиками о перспективах и новых идеях развития.
Заключительная лекция этого курса, на которой мы обсудим перспективы развития PostgreSQL. Разные виды кластеров, column storage, in-memory структуры, параллельная обработка запросов, хинты, пространственные данные и другие интересные задачи, которые слишком масштабны для этого курса.
Координировать и читать этот курс буду я, Анастасия Лубенникова, разработчик ядра PostgreSQL.
Предложения и пожелания оставляйте в комментариях.
Автор: Postgres Professional
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/postgresql/106977
Ссылки в тексте:
[1] pgconf.ru: https://pgconf.ru/
[2] PostgreSQL Tutorial : http://www.postgresqltutorial.com/
[3] SQL Tutorial: http://www.w3schools.com/sql/default.asp
[4] Practical Programming in C: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/index.htm
[5] здесь: http://algolist.manual.ru/
[6] здесь: https://yandexdataschool.ru/edu-process/courses/algorithms
[7] Источник: http://habrahabr.ru/post/273623/
Нажмите здесь для печати.