Открыть сервис

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 (хранение метрик, логов, трейсов);
  • рекламных и финансовых отчётов;
  • обработки телеметрии и данных интернета вещей;
  • аналитики в реальном времени поверх потоковых данных.

Среди пользователей — крупные технологические компании, телеком-операторы, финансовые организации и сервисы с большим объёмом событийных данных.

Преимущества и ограничения

Преимущества:

Ограничения:

  • слабая пригодность для транзакционных нагрузок (OLTP);
  • отсутствие полноценных UPDATE и DELETE в реальном времени;
  • сложности с частыми точечными изменениями;
  • требовательность к оперативной памяти при отдельных операциях (например, JOIN);
  • отсутствие строгих ограничений целостности и внешних ключей.

Экосистема и развитие

Вокруг ClickHouse сформирована экосистема: клиентские библиотеки для Python, Java, Go, C++, Node.js; коннекторы к BI-инструментам (Grafana, Tableau, Superset); облачный сервис ClickHouse Cloud. Проект имеет собственный формат хранения, протокол обмена и систему управления репликацией.

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

Источники

  • Официальная документация ClickHouse
  • Репозиторий проекта на GitHub
  • Технические публикации инженеров «Яндекса»
  • Материалы конференций по аналитическим СУБД