Вместо того чтобы хранить целые строки вместе, ClickHouse хранит каждый столбец отдельно на диске.

Пример: Традиционное хранение данных построчно (PostgreSQL, MySQL)

В базе данных с построчным хранением все столбцы строки хранятся вместе:

IDИмяВозрастЗарплата
1Alice3050000
2Bob2560000
3Carol4070000

Хранится на диске (построчно):

1, Alice, 30, 50000
2, Bob, 25, 60000
3, Carol, 40, 70000

Проблема: Аналитические запросы (например, AVG(Зарплата)) должны сканировать целые строки, загружая ненужные столбцы в память.

Столбцовое хранение данных в ClickHouse

В ClickHouse каждый столбец хранится отдельно:

ID:      1, 2, 3
Name:    Alice, Bob, Carol
Age:     30, 25, 40
Salary:  50000, 60000, 70000

Запрос только по одному столбцу (например, AVG(Зарплата)) читает только столбец Зарплата, пропуская остальные.
Это избегает ненужных операций ввода-вывода с диска, значительно ускоряя запросы.


2. Ключевые преимущества столбцового хранения данных в ClickHouse

1. Быстрое выполнение запросов
Столбцовое хранение уменьшает накладные расходы на операции ввода-вывода, читая только релевантные столбцы.
Запросы типа SELECT AVG(Зарплата) FROM сотрудники; сканируют только столбец Зарплаты, вместо целых строк.

2. Лучшая компрессия
Поскольку данные в столбцах содержат схожие значения, ClickHouse применяет эффективные алгоритмы сжатия (например, LZ4, ZSTD).
Коэффициенты сжатия значительно выше, чем у построчного хранения, что снижает использование дискового пространства.

Тип храненияКоэффициент сжатия
Построчное (PostgreSQL)2x-3x
Столбцовое (ClickHouse)5x-10x

3. Эффективная обработка запросов с использованием процессора
ClickHouse обрабатывает столбцы пакетами (векторизованное выполнение), используя SIMD (Single Instruction, Multiple Data) для параллельного выполнения.
Это ускоряет агрегации, фильтрацию и вычисления.

4. Эффективная индексация и кэширование
Сортировка по первичному ключу + разреженная индексация оптимизируют запросы по диапазонам.
Зональные карты хранят минимальные/максимальные значения для каждого блока столбца, снижая ненужные сканирования.

5. Идеально подходит для аналитики в масштабе
ClickHouse эффективно обрабатывает миллиарды строк благодаря высокой компрессии и быстрым сканированиям.
Он оптимизирован для обработки временных рядов, событийных логов и аналитики в реальном времени.


3. Пример производительности запросов в реальных условиях

Сценарий: Нахождение средней зарплаты

Построчное хранение данных (PostgreSQL):

SELECT AVG(salary) FROM employees;

Читает целые строки (ID, Name, Age, Salary).
Ненужные столбцы увеличивают нагрузку на I/O и замедляют запросы.

Столбцовое хранение данных (ClickHouse):

SELECT AVG(salary) FROM employees

Читает только столбец Зарплаты → Выполнение намного быстрее!

Производственные бенчмарки

База данныхВремя выполнения (на 100M строках)
PostgreSQL3.5 секунд
ClickHouse0.2 секунд

4. Когда следует использовать ClickHouse?

Лучше всего для:

  • Аналитика в реальном времени (журналы веб-сайтов, мониторинг, отслеживание событий)
  • Обработка больших данных (миллиарды строк)
  • Быстрые агрегации и сложные запросы
  • Базы данных временных рядов

Не идеален для:

  • Транзакционных нагрузок (OLTP)
  • Частых небольших обновлений/удалений (ClickHouse оптимизирован для массовых вставок)