Вместо того чтобы хранить целые строки вместе, ClickHouse хранит каждый столбец отдельно на диске.
Пример: Традиционное хранение данных построчно (PostgreSQL, MySQL)
В базе данных с построчным хранением все столбцы строки хранятся вместе:
| ID | Имя | Возраст | Зарплата |
|---|---|---|---|
| 1 | Alice | 30 | 50000 |
| 2 | Bob | 25 | 60000 |
| 3 | Carol | 40 | 70000 |
Хранится на диске (построчно):
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 строках) |
|---|---|
| PostgreSQL | 3.5 секунд |
| ClickHouse | 0.2 секунд |
4. Когда следует использовать ClickHouse?
✅ Лучше всего для:
- Аналитика в реальном времени (журналы веб-сайтов, мониторинг, отслеживание событий)
- Обработка больших данных (миллиарды строк)
- Быстрые агрегации и сложные запросы
- Базы данных временных рядов
❌ Не идеален для:
- Транзакционных нагрузок (OLTP)
- Частых небольших обновлений/удалений (ClickHouse оптимизирован для массовых вставок)