ClickHouse: колоночная СУБД для аналитики¶
ClickHouse — колоночная система управления базами данных (СУБД) класса OLAP, предназначенная для аналитической обработки больших объёмов данных в режиме реального времени. Разработана в России компанией «Яндекс» для внутренних задач веб-аналитики, в 2016 году открыта под лицензией Apache 2.0 и с тех пор развивается международным сообществом. Характеризуется хранением данных по столбцам, векторным исполнением запросов, высокой степенью сжатия и способностью обрабатывать миллиарды строк за секунды на одном узле.
¶История
Работа над системой началась в 2009 году в «Яндексе». Задача состояла в обработке данных «Метрики» — сервиса веб-аналитики, где требовалось строить отчёты по неагрегированным событиям с минимальной задержкой. Существовавшие на тот момент решения не обеспечивали нужного сочетания скорости и детализации.
Первоначально использовалась СУБД OLAP-сервера, но её возможностей не хватало. В 2011 году появилась собственная разработка, получившая название ClickHouse. В июне 2016 года исходный код был опубликован на GitHub под лицензией Apache 2.0. В 2017 году создана компания ClickHouse Inc. для коммерческой поддержки и облачного сервиса. С 2021 года проект развивается как независимый, при этом «Яндекс» остаётся одним из ключевых контрибьюторов.
¶Архитектура и принципы работы
Основу составляет колоночное хранение: значения каждого столбца записываются отдельно, что снижает объём считываемых данных при аналитических запросах, обращающихся к части полей.
Ключевые особенности:
- Векторное исполнение — операции выполняются над блоками значений, а не над отдельными строками, что эффективно использует кэш процессора.
- Сжатие — применяются специализированные кодеки (LZ4, ZSTD, Delta, DoubleDelta, Gorilla), обеспечивающие сжатие в 5–10 раз и более.
- Разреженный первичный индекс — индекс хранит метки на каждые N строк, что позволяет быстро отсекать ненужные блоки данных.
- MergeTree — семейство основных движков таблиц, в котором данные записываются частями и периодически объединяются в фоне.
- Отсутствие полноценных транзакций и точечных обновлений — данные преимущественно добавляются пакетами; изменения выполняются асинхронно.
ClickHouse поддерживает SQL с расширениями, распределённые запросы, репликацию через ZooKeeper или ClickHouse Keeper, шардирование и материализованные представления.
¶Движки таблиц
Семейство MergeTree включает несколько вариантов:
| Движок | Назначение |
|---|---|
| MergeTree | Базовый движок с сортировкой по первичному ключу |
| ReplacingMergeTree | Удаление дубликатов по ключу сортировки |
| SummingMergeTree | Автоматическое суммирование числовых столбцов |
| AggregatingMergeTree | Хранение промежуточных агрегатных состояний |
| CollapsingMergeTree | Учёт изменений через знак строки |
| Replicated-варианты | Репликация данных между узлами |
Также существуют движки для интеграции с внешними системами: Kafka, MySQL, PostgreSQL, S3, HDFS, JDBC.
¶Применение
ClickHouse используется для:
- веб- и продуктовой аналитики (событийные логи, воронки, retention);
- мониторинга и observability (хранение метрик, логов, трейсов);
- рекламных и финансовых отчётов;
- обработки телеметрии и данных интернета вещей;
- аналитики в реальном времени поверх потоковых данных.
Среди пользователей — крупные технологические компании, телеком-операторы, финансовые организации и сервисы с большим объёмом событийных данных.
¶Преимущества и ограничения
Преимущества:
- высокая скорость аналитических запросов на больших данных;
- эффективное сжатие и экономия дискового пространства;
- горизонтальное масштабирование;
- открытый исходный код и активное сообщество;
- развитая поддержка SQL.
Ограничения:
- слабая пригодность для транзакционных нагрузок (OLTP);
- отсутствие полноценных UPDATE и DELETE в реальном времени;
- сложности с частыми точечными изменениями;
- требовательность к оперативной памяти при отдельных операциях (например, JOIN);
- отсутствие строгих ограничений целостности и внешних ключей.
¶Экосистема и развитие
Вокруг ClickHouse сформирована экосистема: клиентские библиотеки для Python, Java, Go, C++, Node.js; коннекторы к BI-инструментам (Grafana, Tableau, Superset); облачный сервис ClickHouse Cloud. Проект имеет собственный формат хранения, протокол обмена и систему управления репликацией.
Развитие ведётся через публичный репозиторий: сообщество предлагает изменения, проходит ревью и включает их в релизы, выходящие несколько раз в год.
¶Источники
- Официальная документация ClickHouse
- Репозиторий проекта на GitHub
- Технические публикации инженеров «Яндекса»
- Материалы конференций по аналитическим СУБД