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

Обновлено: 24 июня 2026 г. в 18:12

Database Internals (краткое содержание)

сложный

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

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

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

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

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

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

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

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

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

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

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

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

Рамка выбора и редакторский фокус

Фокус главы

движках хранения, транзакциях и репликации внутри СУБД

Профиль нагрузки

Читайте через механизм: путь записи, путь чтения, изоляция, восстановление, репликация, консенсус и поведение под конкуренцией.

Когда выбирать

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

Граница и риск

Не превращайте главу в пересказ книги: важен мост от внутреннего устройства к системному дизайну и эксплуатационным решениям.

Связать дальше

Связывайте выводы с overview конкретных движков, DDIA, репликацией/шардингом и диагностикой производительности.

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

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 помогают обнаруживать повреждения
Выравнивание
Выравнивание уменьшает лишний ввод-вывод

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

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

Первоисточник

Introducing Pebble

Блог Cockroach Labs о замене RocksDB на Pebble: мотивация, совместимость и план полного отказа от RocksDB

Читать статью

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

PostgreSQL
Хранение: B+-дерево, табличные файлы и индексы
Многоверсионность, журнал предзаписи, TOAST для больших значений
MySQL InnoDB
Хранение: B+-дерево и кластеризованный индекс
Многоверсионность, двойная запись, буфер изменений
RocksDB
Хранение: LSM-дерево
Семейства колонок, уровневая и универсальная компакция
Cassandra
Хранение: LSM-дерево
Репликация без ведущего узла, настраиваемая консистентность
MongoDB
Хранение: WiredTiger (B-дерево) — движок по умолчанию с версии 3.2 (декабрь 2015)
Документная модель, шардирование, наборы реплик; LSM-режим WiredTiger так и остался экспериментальным и в декабре 2024 был удалён из кодовой базы
CockroachDB
Хранение: Pebble — LSM-движок на Go, выросший из дизайна RocksDB
Raft-репликация, сериализуемые транзакции, географическое разбиение; Pebble стал движком по умолчанию в v20.2 (ноябрь 2020) и единственным в v21.1 (май 2021)

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

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

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

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

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

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

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

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

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

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