System Design Space
Граф знанийНастройки

Обновлено: 4 мая 2026 г. в 16:20

Database Internals: A Deep Dive (short summary)

сложный

Книга по внутреннему устройству СУБД полезна не ради академического блеска, а потому что без этого слоя слишком легко принимать архитектурные решения по поверхностным признакам и маркетинговым ярлыкам.

В инженерной практике она помогает увидеть, как B-деревья, LSM-деревья, транзакции, репликация и консенсус влияют на путь записи, избыточные чтения, восстановление после сбоев и конкурентное поведение системы.

На интервью и в архитектурных обсуждениях этот материал особенно ценен как дифференциатор: он позволяет объяснять не только что стоит выбрать, но и почему конкретный механизм работает именно так.

Практическая польза главы

Грамотность движка хранения

Понимание B-деревьев и LSM-деревьев помогает принимать зрелые решения по пути записи, пути чтения и профилю нагрузки.

Интуиция изоляции

Знание внутренних механизмов транзакций делает выбор уровня изоляции и модели конкурентного доступа обоснованным.

Репликация и консенсус

Связывайте модели репликации с бизнес-требованиями к доступности, свежести чтений и восстановлению после сбоя.

Углублённый разбор

Используйте знание внутреннего устройства как дифференциатор на интервью: объясняйте не только что выбрать, но и почему это работает.

Связанная глава

PostgreSQL изнутри

Глубокое погружение в многоверсионность, журнал предзаписи, блокировки и индексы PostgreSQL от Егора Рогова.

Читать обзор

Database Internals (Движки хранения)

Авторы: Alex Petrov
Издательство: O'Reilly Media, Inc.
Объём: 370 страниц

Разбор книги Alex Petrov о движках хранения, B-деревьях, LSM-деревьях, транзакциях, репликации, консенсусе, восстановлении и физическом хранении данных.

Оригинал
Перевод

Книга связывает , , , , журнал предзаписи, и в одну инженерную картину: как физическое хранение, транзакции и распределённые протоколы превращаются в свойства реальной СУБД.

Подробный разбор

Code of Architecture

Детальный разбор первой части от Александра и клуба Code of Architecture

Читать разбор

Часть I: движки хранения

B-деревья и их варианты

Структуры данных
B-дерево
Базовая структура с ключами во внутренних узлах
B+-дерево
Данные лежат в листьях, листья связаны между собой
B*-дерево
Плотнее заполняет узлы и реже дробит страницы
Bw-дерево
Безблокировочный вариант для хранения в памяти
Дисковые оптимизации
Организация страниц
Страница содержит заголовок, ячейки и указатели
Буферный пул
Кэширует страницы в памяти
Разделение и слияние
Перестраивает узлы при переполнении или недозаполнении
Страницы переполнения
Хранят крупные значения отдельно от основной страницы

Ключевая идея: B-деревья хорошо подходят для чтения и обновлений на месте, поэтому часто используются в транзакционных нагрузках. PostgreSQL и MySQL InnoDB применяют B+-деревья для индексов.

Подробный разбор

Code of Architecture

Детальный разбор главы об LSM-деревьях от Александра и клуба Code of Architecture

Читать разбор

LSM-деревья

Компоненты
Таблица в памяти
Буфер свежих записей в памяти, часто на базе красно-чёрного дерева
Отсортированная таблица
Отсортированный неизменяемый файл на диске
WAL
Журнал предзаписи для восстановления после сбоя
Компакция
По размеру
Группирует файлы по размеру и снижает избыточную запись
По уровням
Ограничивает размер уровней и ускоряет чтение
FIFO
Подходит для временных рядов и данных со сроком хранения
Оптимизации чтения
Фильтр Блума
Вероятностная проверка наличия ключа
Разреженный индекс
Индексирует блоки внутри отсортированных таблиц
Кэш блоков
Кэширует часто читаемые блоки данных

Ключевая идея: LSM-деревья оптимизированы под запись через последовательный ввод-вывод, но требуют компакции, чтобы удерживать стоимость чтения. Используются в Cassandra, RocksDB, LevelDB, HBase.

B-дерево и LSM-дерево: выбор структуры данных

Архитектура B-дерева

[10 | 20 | 30]
[3|5|8]
[12|15|18]
[22|25|28]
Листья содержат указатели на данные
✓ Преимущества
  • Быстрые чтения: O(log N)
  • Эффективные диапазонные запросы
  • Обновления на месте
✗ Недостатки
  • Избыточная запись
  • Случайный ввод-вывод при записи
Где используется:
PostgreSQLMySQL InnoDBOracleSQL ServerSQLite

Обработка транзакций

Управление конкурентным доступом
Двухфазная блокировка
Фаза набора блокировок → фаза освобождения
MVCC
Версии строк и согласованные снимки
OCC
Проверка конфликтов перед фиксацией
SSI
Сериализуемая изоляция снимка
Восстановление
WAL
Журналирует изменения до применения
ARIES
Анализ, повтор и откат после сбоя
Контрольные точки
Периодически фиксируют безопасное состояние
Теневое страничное хранение
Обновляет копии страниц и атомарно переключает указатель

Часть II: распределённые системы

Подробный разбор

Code of Architecture

Детальный разбор главы о репликации и партиционировании от Александра и клуба Code of Architecture

Читать разбор

Репликация и партиционирование

Репликация
Один ведущий узел
Один узел принимает запись, реплики обслуживают чтение
Несколько ведущих узлов
Запись возможна в нескольких местах, конфликты нужно разрешать
Без выделенного ведущего узла
Чтение и запись подтверждаются кворумом
Цепочечная репликация
Узлы образуют цепочку для строгого порядка обновлений
Партиционирование
По диапазонам
Простая навигация по ключам, но возможны горячие диапазоны
По хешу
Более равномерное распределение, но диапазонные запросы сложнее
Согласованное хеширование
Меньше перемещений данных при добавлении узлов
Составное
Комбинирует хеш и диапазон

Подробный разбор

Code of Architecture

Детальный разбор главы о протоколах консенсуса от Александра и клуба Code of Architecture

Читать разбор

Протоколы консенсуса

Paxos
  • Классический алгоритм Лэмпорта
  • Фазы prepare, promise и accept
  • Сложен в реализации
  • Multi-Paxos снижает цену повторных решений
Raft
  • Консенсус с явным лидером
  • Выбор лидера и репликация журнала
  • etcd, Consul, CockroachDB
  • Проще объяснять и реализовывать
Zab
  • Атомарная широковещательная рассылка ZooKeeper
  • Модель ведущего узла и резервных копий
  • Гарантии FIFO-порядка
  • Оптимизирован под запись

Распределённые транзакции

Протоколы атомарной фиксации
Двухфазная фиксация (2PC)
Подготовка → голосование → фиксация или откат. Блокируется, если координатор падает в критический момент.
Трёхфазная фиксация (3PC)
Добавляет фазу предварительной фиксации, чтобы снизить риск блокировки.
Альтернативные подходы
Сага
Цепочка локальных транзакций с компенсирующими действиями.
Calvin / детерминированная СУБД
Заранее задаёт порядок транзакций и применяет его как репликацию конечного автомата.

Низкоуровневые детали

Файловые форматы

Страницы со слотами
Страница хранит записи переменной длины через таблицу указателей
Формат ячейки
Структура ключа, значения и указателя внутри страницы
Контрольные суммы
CRC32/xxHash помогают обнаруживать повреждения
Выравнивание
Выравнивание уменьшает лишний ввод-вывод

Оптимизация дискового ввода-вывода

Последовательный и случайный доступ
Последовательный доступ обычно дешевле случайного
Прямой ввод-вывод
Обходит файловый кэш ОС
Упреждающее чтение
Заранее подгружает соседние блоки
Объединение записей
Собирает мелкие записи в более крупные операции ввода-вывода

Примеры из реальных СУБД

PostgreSQL
Хранение: B+-дерево, табличные файлы и индексы
Многоверсионность, журнал предзаписи, TOAST для больших значений
MySQL InnoDB
Хранение: B+-дерево и кластеризованный индекс
Многоверсионность, двойная запись, буфер изменений
RocksDB
Хранение: LSM-дерево
Семейства колонок, уровневая и универсальная компакция
Cassandra
Хранение: LSM-дерево
Репликация без ведущего узла, настраиваемая консистентность
MongoDB
Хранение: WiredTiger (B-дерево + LSM)
Документная модель, шардирование, наборы реплик
CockroachDB
Хранение: RocksDB + Raft
Сериализуемые транзакции, географическое разбиение

Итоги и рекомендации

Сильные стороны

  • Глубокий разбор внутреннего устройства СУБД
  • Сравнение B-деревьев и LSM-деревьев через практические компромиссы
  • Подробный разбор протоколов консенсуса
  • Примеры из реальных промышленных СУБД
  • Объяснение физического хранения на диске

Кому подойдёт

  • Инженерам, которые работают с базами данных глубже уровня SQL
  • Разработчикам движков хранения и инфраструктуры данных
  • Тем, кто хочет понимать компромиссы разных СУБД
  • Кандидатам на Staff+ роли в командах баз данных
  • Исследователям и практикам в области систем хранения

Вердикт: «Database Internals» закрывает зазор между высокоуровневыми книгами по системному дизайну и академическими работами. Если DDIA объясняет, какие свойства нужны системе, то Петров показывает, как эти свойства рождаются из страниц, журналов, индексов, репликации и протоколов фиксации. Это сильная книга для тех, кто хочет понимать СУБД на уровне механизмов.

Связанные главы

  • PostgreSQL изнутри (short summary) - Сравнение общих принципов книги с конкретной реализацией PostgreSQL: многоверсионность, журнал предзаписи, блокировки и индексы.
  • Designing Data-Intensive Applications, 2nd Edition (short summary) - Связь между системными идеями DDIA и тем, как движки хранения, репликация и консенсус реализуются внутри СУБД.
  • Введение в хранение данных - Карта раздела по хранению данных: где знание внутреннего устройства помогает выбирать класс хранилища.
  • Фреймворк выбора СУБД - Фреймворк выбора СУБД, где поведение B-деревьев, LSM-деревьев и журнала предзаписи превращается в практические критерии.
  • Репликация и шардинг - Практическое продолжение тем книги: путь чтения и записи, отказоустойчивость, ребалансировка и масштабирование данных.

Где найти книгу

Чтобы отмечать прохождение, включи трекинг в Настройки