Что важно знать
- Сначала запись в журнал, потом в данные.
- B-дерево быстрее читает, LSM-дерево быстрее пишет.
- Аналитика по нескольким колонкам — колоночное хранение.
B-дерево и LSM-дерево, журнал предзаписи, строковое и колоночное хранение.
Практика. Загрузить одну таблицу в PostgreSQL и в колоночную базу (ClickHouse или DuckDB) и сравнить время агрегирующих запросов и размер на диске.
Практика. Описать для своего сервиса профиль нагрузки — чтение, запись, обновления — и обосновать выбор движка хранения.
Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.
B-дерево — сбалансированное дерево с широкими узлами: в узле сотни ключей, узел = страница на диске (8–16 КБ). Высота 3–4 даже для миллиардов строк — значит, 3–4 чтения страницы.
Полный разборСначала запись в журнал, потом в данные. Перед изменением страниц база дописывает в конец журнала, что собирается изменить, и делает fsync. После сбоя журнал проигрывается заново — подтверждённые транзакции восстанавливаются.
Полный разборLSM-дерево превращает случайные записи в последовательные: запись идёт в журнал и в память (memtable), при заполнении memtable сбрасывается на диск отсортированным неизменяемым файлом (SSTable), а файлы в фоне сливаются (compaction).
Полный разборСтроковое: строка лежит целиком подряд — быстро прочитать или изменить одну запись (OLTP). Колоночное: каждая колонка лежит отдельно — быстро посчитать агрегат по нескольким колонкам миллиардов строк (OLAP).
Полный разборПосле собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.