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

Обновлено: 24 июня 2026 г. в 17:01

ClickHouse: аналитическая СУБД и архитектура

средний

Колоночная аналитическая СУБД: MergeTree, партиционирование, репликация, материализованные представления, пути записи и чтения для высокопроизводительной аналитики.

ClickHouse важен не обещанием быстрых отчётов, а тем, как он устроен вокруг реального потока аналитических данных: колоночное хранение, MergeTree, фоновые слияния частей и тяжёлые сценарии чтения.

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

В интервью и архитектурных обсуждениях она особенно сильна там, где нужно чётко развести аналитическую и транзакционную обработку, а также показать, почему ClickHouse хорош для аналитики, но не заменяет систему записи.

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

Модель аналитических данных

Проектируйте таблицы и партиционирование под реальные аналитические вопросы, а не по структуре источников.

Загрузка и слияние

Закладывайте пакетную запись, ключи сортировки и фоновые слияния в расчёт задержки приёма и свежести данных.

Стоимость производительности

Оптимизируйте политику хранения, сжатие и материализованные представления для баланса скорости и стоимости.

Перспектива на интервью

Чётко отделяйте ClickHouse как аналитический движок от транзакционных сценариев и объясняйте компромисс конечной консистентности загрузки.

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

Фокус главы

колоночной аналитике, MergeTree и высокопроизводительных аналитических нагрузках

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

Начинайте с специализированного запроса: аналитика, поиск, временные ряды, графовые обходы, векторное извлечение или мониторинговые метрики.

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

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

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

Опасность — превратить специализированный слой в универсальную БД и потерять границы консистентности, свежести и владения данными.

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

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

Официальная документация

ClickHouse Docs

Базовые концепции: движки таблиц, архитектура, SQL и операционные практики.

Открыть docs

ClickHouse берут тогда, когда отчёты по событиям, логам и историческим фактам перестают укладываться в строковую СУБД. Это колоночная аналитическая база, и её сильная сторона — быстрые агрегирующие запросы, высокая пропускная способность записи и плотное сжатие данных. Расплата — слабая пригодность для точечных транзакций.

По сути ClickHouse — это под : данные раскладываются так, чтобы дёшево читать нужные столбцы и агрегировать большие диапазоны, а не доставать отдельные строки.

Архитектурная цена проявляется в и : вставка создаёт , фоновые процессы выполняют , а запросы выигрывают от , и .

История: ключевые вехи

2009

Внутренний запуск в Яндексе

Появляется как колоночная аналитическая база под высоконагруженные отчёты — там, где строковая СУБД уже не успевала сканировать большие выборки.

2016

Публичный релиз с открытым кодом

Код открывают наружу, и вокруг проекта быстро вырастают драйверы, интеграции и наработанные практики эксплуатации.

2021

Выделение отдельной компании ClickHouse, Inc.

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

2021+

Облако и экосистема

К движку добавляются управляемые предложения, интеграции с объектными хранилищами и инструменты вокруг аналитического контура.

Ключевые принципы архитектуры

Колоночное хранение

Запрос читает только те колонки, которые ему нужны, — и не платит вводом-выводом за остальные при сканировании больших аналитических выборок.

Семейство MergeTree

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

Векторизованное выполнение

Операции идут пакетами строк, а не по одной: это поднимает пропускную способность и плотнее загружает кэш процессора (CPU).

Сжатие и отсечение данных

Колоночное сжатие и индексы отсечения убирают из чтения лишние диапазоны — там, где запрос всё равно сканирует большие объёмы, это решает, упрётесь вы в диск или нет.

Архитектура ClickHouse по слоям

На верхнем уровне ClickHouse разводит три слоя: клиентский вход, координаторы запросов и хранение на MergeTree-таблицах. Запись и чтение проходят через координаторы, а само хранение и вычисления ложатся на реплики шардов — там и расходуются диск и процессор.

Шарды и реплики

Типовой рабочий профиль: шардирование по ключу, репликация через Keeper и параллельное чтение.

Плюсы

  • Горизонтальный масштаб под рост данных.
  • Выше пропускная способность чтения и отказоустойчивость.
  • Гибкая балансировка путей записи и чтения по узлам.

Ограничения

  • Выше операционная сложность.
  • Нужен контроль отставания, очереди слияний и перекоса по шардам.
Подходит для: Крупные BI-сценарии и продуктовая аналитика с высокой пропускной способностью.

Очередь нагрузки

CH-REQ-201
чтение
BI
dashboard_last_15m
CH-REQ-202
запись
Приём
insert_events_batch
CH-REQ-203
чтение
ML
feature_slice_by_tenant
CH-REQ-204
запись
Приём
insert_clickstream_batch

Контур управления

Запросы распределяются по шардам, а реплики обеспечивают высокую доступность и масштаб чтения.

Готово к симуляции архитектуры ClickHouse.

Последнее решение

Активный шаг: ожидание

Шард A / R1

отставание 1

основная реплика

части: 36 | чтения: 0 | записи: 0

Шард A / R2

отставание 2

вторичная реплика

части: 35 | чтения: 0 | записи: 0

Шард B / R1

отставание 1

основная реплика

части: 34 | чтения: 0 | записи: 0

Шард B / R2

отставание 2

вторичная реплика

части: 33 | чтения: 0 | записи: 0

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

операции Keeper: 0

Репликация и фоновые слияния держат части данных и отставание в управляемом диапазоне.

Счётчики кластера

чтения: 0 | записи: 0 | части: 138 | среднее отставание: 1.5

Контролируйте баланс между скоростью приёма, очередью слияний и задержкой запросов.

Архитектурный чек-лист

Партиции и ORDER BY
SLO на отставание репликации
Наблюдаемость слияний и TTL

Пути записи и чтения через компоненты

Интерактивная схема ниже проводит запрос через ключевые компоненты: координатор, реплики шардов, ClickHouse Keeper и фоновое слияние частей — видно, где запись расходится с чтением.

Пути записи и чтения

Интерактивный разбор прохождения ClickHouse-запросов через координатор, реплики шардов, Keeper и фоновые процессы.

1
Клиент
INSERT пакет
2
Координатор вставки
по ключу шарда
3
Реплики MergeTree
новые части
4
ClickHouse Keeper
метаданные репликации
5
Фоновые слияния
укрупнение частей
Путь записи: INSERT проходит через координатор к репликам шардов, создаёт новые части данных и затем оптимизируется фоновыми слияниями.

Путь записи

  1. Клиент отправляет INSERT пакетами, обычно через HTTP или нативный протокол.
  2. Координатор маршрутизирует пакет по ключу шарда на нужные реплики.
  3. Данные пишутся в новые части внутри MergeTree-таблиц и синхронизируются через Keeper.
  4. Фоновые слияния укрупняют части, применяют TTL и мутации, оптимизируют раскладку хранения.

Практика моделирования данных

  • Проектируйте сначала под шаблоны чтения и агрегации, а не под нормализацию транзакционной модели — иначе быстрые запросы придётся доставать через обходные пути.
  • Ключ сортировки (ORDER BY) подбирайте так, чтобы основные фильтры отсекали как можно больше данных ещё до чтения.
  • Партиционирование по времени или домену даёт управляемое удержание данных и режет объём чтения там, где запрос касается только свежего среза.
  • Горячие аналитические отчёты считайте заранее через материализованные представления, а не на каждый запрос с нуля.
  • Время жизни (TTL) и политику удержания закладывайте заранее: объёмы в аналитике растут быстро, и задним числом чистить дороже.

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

Хорошо подходит

  • Продуктовая аналитика, дашборды бизнес-аналитики (BI), наблюдаемость и разбор логов.
  • События и временные ряды, где запись идёт с очень высокой пропускной способностью.
  • Сложные агрегирующие запросы по большим историческим объёмам, где сканируются миллионы строк.
  • Витрины данных почти в реальном времени для продуктовых и аналитических команд.

Стоит избегать

  • Транзакционные сценарии с частыми точечными обновлениями и короткими транзакциями.
  • Нагрузки, где нужны блокировки отдельных строк и строгая транзакционная семантика.
  • Поток мелких построчных изменений (UPDATE/DELETE) в реальном времени — здесь колоночное хранение работает против вас.
  • Случай, где главная задача — оперативно отдать одну запись по ключу, а не агрегировать диапазон.

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

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