ClickHouse — колончатая (columnar) СУБД с открытым исходным кодом, разработанная Яндексом. Оптимизирована для OLAP (Online Analytical Processing) — аналитических запросов к петабайтам данных в режиме реального времени. В колончатых СУБД данные хранятся по столбцам, а не по строкам: запрос к двум столбцам из таблицы в 100 столбцов читает 2% данных вместо 100%.
Как работает
Колончатое хранение: каждый столбец хранится в отдельном файле с компрессией (LZ4, ZSTD). Данные одного типа в колонке сжимаются эффективнее, чем смешанные строки. На практике ClickHouse достигает коэффициента сжатия 10:1-100:1 для аналитических данных. Запись происходит батчами (Merge Tree движок): данные записываются в «части» (parts), которые фоново сливаются.
Основной движок — MergeTree и его вариации:
- MergeTree — базовый, сортировка по первичному ключу.
- ReplicatedMergeTree — с репликацией через ZooKeeper/Keeper.
- SummingMergeTree — автоматическая суммация при слиянии.
- AggregatingMergeTree — инкрементальные агрегации.
- CollapsingMergeTree — отмена строк через sign-колонку.
Производительность: запрос с COUNT(*) по 10 млрд строк — 1-5 секунд. SELECT с GROUP BY по 100 млрд строк — 10-60 секунд. Используется в Яндекс.Метрике (с 2012 года, 20+ трлн строк), Cloudflare, eBay.
История
ClickHouse создан Алексеем Миловидовым в Яндексе в 2009-2016 годах для нужд Яндекс.Метрики. Открытый исходный код опубликован на GitHub в июне 2016 года. Компания ClickHouse Inc. основана в 2021 году, привлекла $250 млн венчурных инвестиций. ClickHouse Cloud (управляемый сервис) запущен в 2022 году. ClickHouse 24.x (2024) — актуальная ветка с поддержкой S3-хранилища и Lightweight Deletes.
ClickHouse в хостинге
ClickHouse требует выделенных ресурсов — минимум 4 ГБ ОЗУ для базовой инсталляции, на практике 16-64 ГБ для аналитических нагрузок. Устанавливается на VPS или выделенный сервер. Managed ClickHouse предлагают: Яндекс Облако (Managed ClickHouse), Selectel, ClickHouse Cloud. Для интеграции с BI-инструментами (Grafana, Superset, Metabase) — штатные коннекторы. Развёртывание через Docker: docker run -d clickhouse/clickhouse-server.
ClickHouse: архитектура и типичные сценарии
ClickHouse использует колоночное хранение: данные каждого столбца хранятся последовательно на диске. При аналитических запросах (SELECT sum(revenue) WHERE date BETWEEN ...) читается только столбец revenue и date, а не все данные строки. Компрессия колоночных данных в 5-10 раз лучше строчного хранения — однотипные данные в столбце сжимаются эффективнее.
Материализованные представления (Materialized View) — ключевая фича: агрегированные данные обновляются при вставке в исходную таблицу. Например, кликстрим пишется в сырую таблицу, а MV автоматически обновляет почасовые агрегаты. ReplicatedMergeTree движок — основа для отказоустойчивых кластеров: репликация через ZooKeeper/ClickHouse Keeper. Distributed таблицы — прозрачный шардинг на несколько нод.
На что обращать внимание
ClickHouse — OLAP, не OLTP: нет полных ACID-транзакций. UPDATE и DELETE — медленные операции (не предназначены для транзакционной нагрузки). Для интернет-магазина с частыми UPDATE — используйте PostgreSQL или MySQL. ClickHouse — для анализа логов, метрик, аналитики поведения. Distributed table — таблица-шард, запросы к которой ClickHouse распределяет по кластеру. ZooKeeper/ClickHouse Keeper обязателен для репликации. В связке с Redis ClickHouse часто используется: Redis — для оперативного кэша, ClickHouse — для аналитических агрегаций.