Вместо того чтобы хранить целые строки вместе, 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 оптимизирован для массовых вставок)