Что такое движок хранения

Представь, что ты проектируешь систему для хранения миллионов записей. Тебе нужно решить: как именно эти данные будут лежать на диске, как быстро они будут читаться и как не потерять их при отключении питания. Именно для этого существуют движки баз данных — та самая штука, которая работает на самом нижнем уровне СУБД.

В англ литературе движок хранения называется storage engines

Зачем разделять СУБД и движок?

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

То есть ты можешь взять один и тот же сервер MySQL, но для таблицы с транзакциями подключить надежный движок InnoDB, а для таблицы с временными логами — быстрый, но менее надежный движок. Тебе не нужно переписывать систему с нуля, достаточно сменить движок хранения под конкретную нагрузку.

Из чего состоит движок

Любой современный движок (будь то InnoDB в MySQL или RocksDB) состоит из 5 ключевых менеджеров:

  • Менеджер транзакций (Transaction Manager): Следит за тем, чтобы все твои BEGIN и COMMIT работали атомарно («всё или ничего»).
  • Менеджер блокировок (Lock Manager): Координирует доступ, когда 1000 пользователей одновременно пытаются купить последний билет на концерт. Раздает эксклюзивные и разделяемые блокировки.
  • Методы доступа (Access Methods): Сердце движка. Это те самые алгоритмы и структуры данных, которые определяют, как искать инфу. Здесь живут B-деревья и LSM-деревья.
  • Менеджер буферов (Buffer Manager): Ходить на диск за каждой строкой — самоубийство для производительности. Этот парень кэширует самые горячие «страницы» данных прямо в оперативной памяти (RAM).
  • Менеджер восстановления (Recovery Manager): Отвечает за Durability из ACID. Пишет специальный журнал (WAL - Write-Ahead Log), чтобы восстановить базу, если сервер сгорел во время записи.