Learning Platform
Глоссарий Troubleshooting
Урок 01.01 · 15 мин
Начальный
ClickHouseOLAPColumnar StorageАрхитектура

Что такое ClickHouse

ClickHouse — это не PostgreSQL для аналитики. Это утверждение кажется банальным, пока вы не попробуете выполнить агрегацию по миллиарду строк и не получите результат за 50 миллисекунд. Большинство разработчиков знакомятся с ClickHouse через кейс “нам нужно что-то быстрее для дашбордов”. Но истинное понимание начинается с архитектурных принципов, а не с бенчмарков.

ClickHouse — это колоночная аналитическая СУБД (column-oriented OLAP database management system) с открытым исходным кодом. Написана на C++. Разработана в Яндексе. По умолчанию работает на одном узле, но масштабируется до распределённых кластеров. Версия ClickHouse 26.3 LTS используется на протяжении всего курса — это долгосрочная поддерживаемая версия, рекомендованная для production.


История: от Яндекс.Метрики к open-source

ClickHouse появился не как академический проект и не как корпоративный продукт, придуманный в маркетинге. Он появился потому, что существующие инструменты не справлялись с реальной задачей.

2008 год. Яндекс.Метрика — аналитическая система для отслеживания поведения пользователей на сайтах. Ключевое требование: произвольные отчёты в реальном времени по событиям. Пользователь хочет увидеть конверсию по 15 параметрам за последние 30 дней — система должна ответить за секунды, а не минуты.

2009–2012 годы. Яндекс пробовал различные подходы: MySQL (слишком медленный для агрегаций), вертикальные СУБД вроде Vertica (дорого, не масштабируется на объёмах Метрики), Hadoop MapReduce (слишком высокая latency для интерактивных запросов). Ни один вариант не давал нужной комбинации — быстрые произвольные запросы + высокая скорость вставки + экономичное хранение.

2012 год. Первая версия ClickHouse запущена в production в Яндекс.Метрике. Ядро — MergeTree: движок хранения, специально разработанный под аналитические паттерны. К 2014 году ClickHouse обрабатывал десятки триллионов строк в Метрике.

Июнь 2016 года. Яндекс открыл исходный код ClickHouse на GitHub. За несколько недель проект набрал тысячи звёзд. Компании по всему миру начали тестировать его в своих аналитических стеках.

2021 год. Образована независимая компания ClickHouse, Inc. Алексей Миловидов (создатель ClickHouse) стал CEO. Яндекс сохранил участие в разработке, но проект стал по-настоящему независимым open-source. Появилось облачное предложение ClickHouse Cloud.

Сегодня ClickHouse используют Cloudflare (миллиарды DNS-запросов в день), Uber (аналитика поездок), GitLab (CI/CD аналитика), PostHog (product analytics), Contentsquare, Messagebird и тысячи других компаний.


OLAP vs OLTP: принципиальная разница

Прежде чем понять ClickHouse, нужно чётко разграничить два класса задач — OLAP и OLTP. Это не просто аббревиатуры — это фундаментально разные паттерны доступа к данным, и попытка использовать одну систему для обоих классов заканчивается компромиссами везде.

OLTP vs OLAP: сравнение паттернов
OLTP (PostgreSQL, MySQL)
Паттерн запросовЕдиничные строкиOLTP: SELECT * FROM orders WHERE id = 12345. Точечное чтение одной записи. Оптимизировано для B-tree индексов и row-based storage.
Размер транзакций1–100 строкOLTP транзакции: INSERT одного заказа, UPDATE статуса платежа, DELETE устаревшей сессии. Строго атомарные операции с ACID-гарантиями.
Объём данныхГБ–ТБOLTP базы хранят оперативные данные: текущие заказы, сессии, профили пользователей. Размер управляем — старые данные архивируются.
ПараллелизмТысячи транзакций/сOLTP оптимизирован под высокий параллелизм коротких транзакций. Тысячи пользователей одновременно читают и пишут разные строки.
OLAP (ClickHouse, Snowflake)
Паттерн запросовМиллиарды строкOLAP: SELECT date, count(), avg(revenue) FROM events WHERE date > '2026-01-01' GROUP BY date. Сканирование всей таблицы с агрегацией. B-tree индекс бесполезен.
Размер транзакцийМиллионы строкOLAP вставки: batch INSERT миллиона событий из Kafka, загрузка суточного дампа логов. Транзакционность не приоритет — скорость вставки важнее.
Объём данныхТБ–ПБOLAP системы хранят исторические данные за годы. Clickhouse экономит место через компрессию — реальные данные часто сжимаются в 5–10 раз.
ПараллелизмЕдиницы запросовOLAP запросы редкие, но тяжёлые: несколько аналитиков выполняют запросы одновременно. Один запрос использует все ядра CPU для параллельного scan.

Попытка использовать PostgreSQL для OLAP-запросов — классическая ошибка. PostgreSQL хранит данные построчно: строка заказа содержит id, user_id, created_at, status, amount, product_id, … — все 20 полей рядом. Чтобы посчитать среднее по полю amount, PostgreSQL читает все 20 полей каждой строки, даже если нужно только одно.

ClickHouse хранит данные по столбцам: все значения amount хранятся в одном файле, все значения created_at — в другом. Для вычисления среднего по amount читается только один файл. При 200-колоночной таблице разница в объёме I/O — 200 раз.

OLTP vs OLAP: сравнительный анализ для DE Row vs Columnar: физика колоночного хранения Column Store в SQL Internals: хранение по колонкам и его выгоды

Ключевые характеристики ClickHouse

Колоночное хранение. Данные хранятся по столбцам, а не по строкам. Для аналитических запросов, которые читают 3–5 столбцов из 100, это снижает I/O в десятки раз.

Векторизованное выполнение. Обработка данных происходит блоками (chunk) по 8192 строк (один granule). Каждый блок обрабатывается с использованием SIMD-инструкций CPU — vectorized execution. Это позволяет обрабатывать миллиарды строк в секунду на одном узле.

Вставки в реальном времени. ClickHouse принимает INSERT прямо в MergeTree-таблицу, создавая иммутабельные части (parts) на диске. Не нужен staging ETL: данные из Kafka или приложения записываются напрямую и сразу становятся доступны для запросов.

SQL-интерфейс. ClickHouse поддерживает стандартный SQL с расширениями: ARRAY JOIN, SAMPLE, FINAL, агрегатные функции (quantile, uniqCombined, topK). Не нужно учить новый язык запросов — если вы знаете SQL, вы уже можете работать с ClickHouse.

Нет транзакций в традиционном смысле. ClickHouse не поддерживает BEGIN/COMMIT/ROLLBACK в стандартном ACID-смысле. Это не баг — это сознательный выбор. Транзакционная изоляция и мьютексы снижают производительность при параллельных write-операциях. ClickHouse выбирает eventual consistency через механизм слияния частей.

ACID на пальцах: что именно обещает СУБД

Компрессия. По умолчанию используется LZ4 — быстрый алгоритм сжатия. Для холодных данных можно переключиться на ZSTD. Реальные коэффициенты сжатия: 5–15x для временных рядов, 3–8x для событий. Это не только экономия диска — сжатые данные быстрее читаются с NVMe.


Кто использует ClickHouse

Cloudflare — 100+ миллиардов DNS-запросов в день. ClickHouse используется для хранения и анализа DNS-трафика, HTTP-логов, данных DDoS-защиты. Публично задокументированы масштабы: петабайты данных, десятки миллиардов вставок в день.

Uber — аналитика маршрутов, цен, поведения водителей и пассажиров. ClickHouse заменил несколько специализированных систем единым слоем аналитики.

GitLab — CI/CD аналитика. Каждый pipeline job, каждый тест, каждое развёртывание логируется в ClickHouse. Инженеры видят агрегаты в реальном времени без задержек ETL.

PostHog — open-source product analytics платформа. ClickHouse является основным хранилищем событий. Публично делятся архитектурой: один ClickHouse-кластер обрабатывает product analytics для тысяч компаний.

Общий паттерн: компании, которым нужно хранить события/логи/метрики в большом объёме и анализировать их с низкой latency. ClickHouse становится выбором, когда PostgreSQL “не тянет” аналитику, а Snowflake/BigQuery слишком дороги или имеют неприемлемую latency.


ClickHouse 26.3 LTS

На протяжении всего курса используется версия 26.3 LTS (Long-Term Support). Это означает:

  • Исправления безопасности и критических ошибок в течение 1 года после релиза
  • Стабильный API — функции, доступные в 26.3, не будут удалены или изменены несовместимо
  • Рекомендована для production-развёртываний, где обновление до последней версии нежелательно

Docker image: clickhouse/clickhouse-server:26.3. В labs вы будете работать именно с этой версией.

NOTE

ClickHouse выпускает новую версию каждый месяц (например, 26.1, 26.2, 26.3…). LTS-версии выходят реже и поддерживаются дольше. Для изучения внутреннего устройства важно работать с конкретной версией — эксперименты на плавающем “latest” тэге дают непредсказуемые результаты.


Ключевые выводы

  1. ClickHouse — колоночная OLAP СУБД, созданная в Яндексе для Метрики и открытая в 2016 году
  2. OLTP vs OLAP — разные паттерны доступа, не конкурирующие системы: PostgreSQL для операций, ClickHouse для аналитики
  3. Колоночное хранение даёт преимущество в I/O: для запроса по 3 из 100 столбцов читается в 33 раза меньше данных
  4. Нет ACID-транзакций — сознательный выбор: eventual consistency через механизм слияния частей взамен на максимальную скорость вставки и агрегации
  5. 26.3 LTS — стабильная долгосрочная версия, используемая в курсе для воспроизводимых экспериментов

Как создавался курс

Курс создан при участии Claude (Anthropic) как соавтора: ИИ помогал писать материалы, структурировать темы, генерировать примеры кода и диаграммы. Каждая глава проходила ручную сверку с первоисточниками — спецификациями, документацией, исходным кодом рассматриваемых систем — но гарантировать 100% точность невозможно.

Если вы заметили неточность, опечатку или хотите предложить улучшение — напишите в Telegram-группу курса. Это самый ценный вклад в курс, который вы можете сделать.


Углублённое изучение с Claude

Курс рассчитан на самостоятельное изучение, но любая теория быстрее ложится, если задавать вопросы. Рекомендую держать рядом браузерное расширение Claude (claude.com/download) — оно работает с контентом открытой страницы: выделяете кусок урока и спрашиваете напрямую.

Сценарии, которые особенно хорошо работают для углублённого погружения:

  • «Объясни проще» / «дай ещё один пример» — когда формулировка из урока не дошла с первого раза.
  • «Покажи, как это устроено на уровне кода / железа» — когда хочется спуститься на слой ниже того, что даёт урок.
  • «Как это связано с [другая тема курса]» — когда нужно увязать концепцию с тем, что было раньше.
  • «У меня в проекте стек X — как применить?» — когда хочется примерить материал на свой реальный кейс.

Это не замена курсу, а способ ускорить интеграцию материала в вашу картину мира. Если что-то из ответов Claude расходится с уроком — присылайте в Telegram-группу, курс будет уточнён.


Нашли ошибку?

Если заметили неточность, опечатку или хотите предложить улучшение:

Telegram-группа курса
Обсуждение, вопросы, предложения

Telegram-канал

Подписывайтесь, чтобы узнавать об обновлениях и новых курсах:

@levoely_channel
Новости, обновления, новые курсы

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какой фундаментальный принцип хранения данных используется в ClickHouse, в отличие от PostgreSQL?

Закончили урок?

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

Войдите чтобы оценить урок

Прогресс модуля
0 из 4