1 of 39

Технологии и разработка СУБД

Лекция 2. Обзор архитектуры

Анастасия Лубенникова

Александр Алексеев

2 of 39

Лекция 2

  • Часть 1: Общая архитектура РСУБД
  • Часть 2: Модели процессов

3 of 39

Часть 1: Общая архитектура РСУБД

4 of 39

Основные компоненты

5 of 39

Client communication manager

  • клиент-серверная архитектура
  • основные действия:
    • устанавливать соединение, запоминать состояние
    • принимать SQL команды
    • возвращать данные
    • возвращать управляющие сообщение (коды ответа, коды ошибок)
  • различные протоколы

6 of 39

Client communication manager. PostgreSQL

  • https://postgrespro.ru/docs/postgrespro/9.6/protocol
  • libpq
    • библиотека на С
    • основной клиентский интерфейс
    • входит в стандартную поставку постгреса
  • C++, Perl, Python, Tcl, ODBC ...
  • JDBC (Java Database Connectivity)

7 of 39

Основные компоненты

8 of 39

Process Manager

  • создание “воркера” для обслуживания подключенного клиента
  • управление служебными “воркерами”
  • контроль доступа
    • права на подключение
    • доступность необходимых ресурсов
    • приоритизация запросов

9 of 39

Process Manager. PostgreSQL

  • процесс postgres (postmaster)
    • создает отдельный процесс для каждого подключения
    • управляет всеми служебными процессами
  • контроль доступа
    • файл конфигурации: pg_hba.conf

10 of 39

Основные компоненты

11 of 39

Query processor

  • Парсер (Parser)
  • Авторизация пользователя
    • проверка прав доступа к данным
  • выполнение DDL запроса
    • DDL and Utility processor
  • выполнение DML запроса
    • Планировщик (Planner)
    • Оптимизатор (Optimizer)
    • Исполнитель (Executor)

12 of 39

Основные компоненты

13 of 39

Transactional Storage Manager

  • Методы доступа (Access methods)
    • структуры данных и алгоритмы работы с данными на диске
    • физическое расположение данных
    • таблицы / индексы
  • Разделяемый кэш страниц (Buffer Manager)
    • для ускорения доступа к данным
  • Управление блокировками
    • для обеспечения конкурентного доступа к страницам данных
  • Управление логом транзакций
    • для выполнения свойств ACID (атомарность и надежность)
  • MVCC

14 of 39

Ответ на запрос

  • Ответ возвращается клиенту через Client Communication Manager

15 of 39

Основные компоненты

16 of 39

Shared Components and Utilities

  • Системный каталог
    • хранит информацию об объектах базы (таблицы, права доступа, зависимости...)
  • Управление памятью
  • Управление логами
  • Управление настройками
  • Сборка статистики

17 of 39

Часть 2: Модели процессов

18 of 39

Модели многопоточности

  • Process
    • Не разделяемая память
    • Взаимодействие с помощью сигналов, пайпов, сокетов, ...
  • Thread
    • Разделяемая память
    • Взаимодействие с помощью мьютексов, атомарных переменных, TLS, ...
  • Корутины / легковесные потоки
    • Выглядят как потоки, но мапятся на потоки операционной системы N:M (N > M)
    • Дешевле переключение контекста, асинхронный I/O
    • В языке (Go, Haskell) или в виде библиотеки (Scala, Rust)
  • Акторы
    • Легковесные потоки без разделяемой памяти
    • Взаимодействие с помощью сообщений, линков и мониторов
    • Примеры: Erlang, Scala (Akka), Cloud Haskell

19 of 39

Модели многопоточности

DBMS Worker - кусок кода, обслуживающий подключение клиента.

  • OS Process per Worker
    • PostgreSQL, IBM DB2, Oracle
  • OS Thread per Worker
    • IBM DB2, Microsoft SQL Server, MySQL
  • Process pool
    • PgBouncer for PostgreSQL, DRCP for Oracle, …
  • Coroutine per Worker
    • RethinkDB, а также СockroachDB, и вообще мир Go
  • Actor per Worker
    • Riak, Couchbase, и вообще мир Erlang

20 of 39

Домашнее задание №1. Все получилось?

  • Настроить Linux-окружение для разработки (можно виртуалку)
  • Освежить знания C и Git
  • Собрать PostgreSQL из исходников и установить
  • Спроектировать схему базы данных “телефонная книга”

21 of 39

Домашнее задание №2

  • Выберите домашнее задание на семестр и сроки его сдачи

22 of 39

Вариант 1

23 of 39

Вариант 2

24 of 39

Вариант 3

25 of 39

Вариант 4

  • Сделать расширение-хук “пользователь готовится авторизоваться”, “пользователь неуспешно авторизовался”, “пользователь успешно авторизовался” и тд
  • Хотя бы банально для логирования.

26 of 39

Вариант 5

27 of 39

Вариант 6

28 of 39

Вариант 7

29 of 39

Вариант 8

  • Расширение для просмотра списка загруженых .so/DLL
  • SELECT list_shared_libraries();
  • Как минимум совместимость с Linux и Windows, желательно также MacOS и FreeBSD.

30 of 39

Вариант 9

  • Расширение для просмотра списка открытых файловых дескрипторов и что это: сокет, файл, unix socket, pipe, ...

31 of 39

Вариант 10

32 of 39

Вариант 10 (продолжение)

33 of 39

Вариант 11

  • HurmaDB: оптимизировать выполнение range-запросов для больших диапазонов (не строить весь ответ в памяти)
  • https://github.com/afiskon/hurmadb

34 of 39

Вариант 12

35 of 39

Дополнительные материалы

36 of 39

Вопросы и ответы.

37 of 39

Бонус-слайды. Вопросы залу

  • Что вы знаете о процессе разработки, Agile / XP / Scrum, видах тестирования, фич-бранчах, code review, CI, и т.д?
  • Нужно ли объяснить, что представляет собой HTTP?

38 of 39

Бонус-слайды. REST API

39 of 39

Бонус-слайды. Протокол Memcached

>>> version

<<< VERSION 1.4.10

>>> get example_key

<<< VALUE example_key 0 3

<<< 128

<<< END

>>> decr example_key 3

<<< 125