Если посмотреть на все многообразие движков хранения, глобально их можно разделить на две категории, основанные на разных структурах данных. В одной из следующих глав мы разберем эти структуры подробнее, а пока давай посмотрим на их главных представителей.
Категория 1: B-Tree
Классика для OLTP.
Эти движки обновляют данные прямо там, где они лежат на диске (In-place updates). Они идеальны, когда тебе нужно быстро находить конкретные строки и когда чтений больше, чем записей.
- MyISAM: Исторический движок по умолчанию в MySQL (до 2009 года). Был очень быстрым на чтение, но не поддерживал транзакции и при любой записи блокировал всю таблицу целиком. Сейчас считается устаревшим.
- InnoDB: Современный стандарт MySQL. Решил все проблемы MyISAM: добавил честные ACID-транзакции, внешние ключи и построчную блокировку (Row-level locking). Если ты сегодня поднимаешь MySQL, в 99% случаев под капотом работает InnoDB.
Категория 2: LSM-Tree
Созданы для быстрых записей и SSD.
LSM-движки никогда не перезаписывают старые данные. Они пишут новые изменения строго последовательно (Append-only), как в лог. Это феноменально ускоряет запись и идеально ложится на архитектуру современных SSD-дисков.
- LevelDB: Написан Google в 2011 году. Минималистичный и невероятно быстрый движок, который доказал жизнеспособность LSM-подхода. Используется, например, в браузере Chrome для IndexedDB.
- RocksDB: Форк LevelDB. Инженеры сделали его многопоточным, добавили транзакции и выжали максимум из SSD. Сегодня RocksDB — это абсолютный топ для высоконагруженных систем.
Почему Big Tech выбирает RocksDB?
В прошлом уроке мы говорили, что современная СУБД является модульной. И поэтому можно менять тот же движок хранения данных.
Например, некоторые крупные компании берут RocksDB и встраивают его внутрь своих распределенных баз данных как фундаментальный слой хранения.
- Twitter (Manhattan): Ребята написали собственную распределенную базу Manhattan. Изначально там был свой движок, но в итоге они перешли на RocksDB, так как он лучше справлялся с их колоссальным потоком твитов (write-heavy нагрузка).
- Instagram (Rocksandra): Instagram исторически сидит на Apache Cassandra. Но инженеры пошли дальше: они взяли код Кассандры, убрали оттуда родной движок хранения и вставили свой RocksDB. Этот гибрид («Rocksandra») показал 10-кратное улучшение по латентности на их нагрузках.
- NewSQL системы: Современные распределенные базы (CockroachDB, YugabyteDB) часто используют RocksDB (или его модификации) под капотом каждого своего узла.
Что дальше? Мы постоянно упоминали B-деревья и LSM-деревья. Но как именно они умудряются так быстро искать данные среди терабайтов? В одном из следующих модулей мы спустимся на уровень структур данных и разберем магию индексов.