# ClickHouse

> Колоночная аналитическая СУБД с открытым кодом, созданная в Яндексе для Яндекс.Метрики; выполняет агрегирующие SQL-запросы по миллиардам строк за секунды.

Источник: https://llmdocs.ru/wiki/clickhouse/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: колоночная аналитическая СУБД (OLAP)
- **Автор**: Алексей Миловидов и команда Яндекса
- **Разработка**: с 2009 года для Яндекс.Метрики
- **Открытие кода**: июнь 2016
- **Язык**: C++
- **Лицензия**: Apache 2.0
- **Разработчик сейчас**: ClickHouse, Inc. (с 2021) и сообщество
- **Основной движок таблиц**: MergeTree
**ClickHouse** — колоночная система управления базами данных для аналитики. Она рассчитана на запросы вида «посчитай выручку по дням и регионам за год» по таблицам из миллиардов и триллионов строк и выполняет их за секунды и доли секунды. ClickHouse хранит данные [по столбцам](https://llmdocs.ru/wiki/columnar-storage.md), сжимает их и обрабатывает векторно, пакетами значений, используя все ядра процессора. Запросы пишутся на диалекте [SQL](https://llmdocs.ru/wiki/sql.md).[1]

ClickHouse применяют для веб-аналитики, мониторинга и логов, финансовой аналитики, телеметрии, рекламных систем и аналитики LLM-приложений.

## История

Разработку начал Алексей Миловидов в Яндексе в 2009 году для системы веб-аналитики Яндекс.Метрика, где требовалось строить отчёты «на лету» по сырым данным, а не по заранее подсчитанным агрегатам. В 2012 году ClickHouse заработал в продакшене Метрики, а в июне 2016 года Яндекс открыл исходный код под лицензией Apache 2.0.[4] В 2021 году для развития проекта была основана компания ClickHouse, Inc., предлагающая и облачный сервис. Архитектура системы подробно описана в статье на конференции VLDB 2024.[3]

## Почему так быстро

- **Колоночное хранение.** Запрос читает только нужные столбцы: для суммы по одному столбцу из сотни не нужно читать остальные 99.
- **Сжатие.** Однотипные значения столбца сжимаются в разы и десятки раз (LZ4, ZSTD и специальные кодеки для временных рядов), так что с диска читается меньше данных.
- **Векторное выполнение.** Операции применяются к блокам из тысяч значений, эффективно используя кэш процессора и SIMD-инструкции.
- **Параллелизм.** Запрос распараллеливается на все ядра сервера и на узлы кластера.
- **Разреженный первичный индекс.** Данные отсортированы по ключу, а индекс хранит по одной отметке на блок строк (по умолчанию 8192), помещаясь в памяти даже для огромных таблиц.

Сравнение с другими аналитическими системами на одинаковых данных — в открытом тесте ClickBench.[5]

## MergeTree

Основной движок таблиц — **MergeTree**. Вставка создаёт новую неизменяемую отсортированную «часть» (*part*), а фоновые процессы сливают мелкие части в крупные — идея, родственная LSM-деревьям (см. [B-дерево](https://llmdocs.ru/wiki/b-tree.md)).[2]

```sql
CREATE TABLE events
(
    event_time  DateTime,
    user_id     UInt64,
    event_type  LowCardinality(String),
    url         String,
    duration_ms UInt32
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_type, event_time)
TTL event_time + INTERVAL 1 YEAR;          -- автоматически удалять старые данные

SELECT
    toDate(event_time) AS day,
    event_type,
    count() AS events,
    uniq(user_id) AS users,                -- приближённый подсчёт уникальных
    quantile(0.95)(duration_ms) AS p95
FROM events
WHERE event_time >= now() - INTERVAL 30 DAY
GROUP BY day, event_type
ORDER BY day;
```

Варианты движка решают специальные задачи: ReplacingMergeTree удаляет дубликаты по ключу, SummingMergeTree и AggregatingMergeTree хранят предагрегированные данные, ReplicatedMergeTree обеспечивает [репликацию](https://llmdocs.ru/wiki/replication.md). **Материализованные представления** обновляются при вставке и позволяют строить агрегаты на лету.

## Сильные стороны

- Огромная скорость агрегаций и сканирования; богатая библиотека аналитических функций — квантили, приближённые уникальные значения, массивы, оконные функции.
- Чтение напрямую из файлов Parquet, CSV и JSON, из S3, Kafka, [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md) и MySQL.
- Эффективное хранение: логи и метрики занимают в разы меньше места, чем в строковых СУБД.
- Масштабирование от ноутбука (`clickhouse-local`) до кластеров из сотен серверов.

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

- **Не для транзакционной нагрузки.** Нет полноценных [транзакций ACID](https://llmdocs.ru/wiki/transaction-acid.md) в привычном смысле; точечные обновления и удаления дороги и выполняются асинхронными «мутациями» или облегчённым удалением.
- **Вставка пакетами.** Тысячи мелких вставок в секунду создают слишком много частей; данные собирают в пакеты или используют асинхронную вставку.
- **Соединения больших таблиц** работают хуже, чем в системах, специально под них оптимизированных; схему проектируют широкими денормализованными таблицами (см. [Нормализация](https://llmdocs.ru/wiki/normalization.md)).
- **Свой диалект SQL** с особенностями типов и функций.

## Место в архитектуре

Типичная схема: транзакционные данные живут в PostgreSQL или MySQL, события и логи потоком идут через Kafka, а ClickHouse хранит их для аналитики, дашбордов (Grafana, Superset) и отчётов. Альтернативы — облачные хранилища (BigQuery, Snowflake, Redshift), Apache Druid и Pinot, а для аналитики на одной машине — встраиваемая DuckDB.

## См. также

- [Колоночное хранение](https://llmdocs.ru/wiki/columnar-storage.md)
- [SQL](https://llmdocs.ru/wiki/sql.md)
- [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md)
- [Репликация баз данных](https://llmdocs.ru/wiki/replication.md)
- [Мониторинг и алертинг](https://llmdocs.ru/wiki/monitoring-alerting.md)

## Источники

1. [ClickHouse Documentation](https://clickhouse.com/docs)
2. [ClickHouse — MergeTree table engine](https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree)
3. [R. Schulze et al. — ClickHouse: Lightning Fast Analytics for Everyone (VLDB 2024)](https://www.vldb.org/pvldb/vol17/p3731-schulze.pdf)
4. [ClickHouse — History](https://clickhouse.com/docs/about-us/history)
5. [ClickBench — a Benchmark For Analytical DBMS](https://benchmark.clickhouse.com/)
6. [ClickHouse — GitHub](https://github.com/ClickHouse/ClickHouse)
