Эволюция движков

Если посмотреть на все многообразие движков хранения, глобально их можно разделить на две категории, основанные на разных структурах данных. В одной из следующих глав мы разберем эти структуры подробнее, а пока давай посмотрим на их главных представителей.

Категория 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 и встраивают его внутрь своих распределенных баз данных как фундаментальный слой хранения.

  1. Twitter (Manhattan): Ребята написали собственную распределенную базу Manhattan. Изначально там был свой движок, но в итоге они перешли на RocksDB, так как он лучше справлялся с их колоссальным потоком твитов (write-heavy нагрузка).
  2. Instagram (Rocksandra): Instagram исторически сидит на Apache Cassandra. Но инженеры пошли дальше: они взяли код Кассандры, убрали оттуда родной движок хранения и вставили свой RocksDB. Этот гибрид («Rocksandra») показал 10-кратное улучшение по латентности на их нагрузках.
  3. NewSQL системы: Современные распределенные базы (CockroachDB, YugabyteDB) часто используют RocksDB (или его модификации) под капотом каждого своего узла.

Что дальше? Мы постоянно упоминали B-деревья и LSM-деревья. Но как именно они умудряются так быстро искать данные среди терабайтов? В одном из следующих модулей мы спустимся на уровень структур данных и разберем магию индексов.