ClickHouse использует современные методы сжатия данных для уменьшения объема хранилища, улучшения производительности запросов и минимизации операций ввода-вывода с диска. Поскольку ClickHouse — это столбцовая база данных, он может применять специализированные алгоритмы сжатия для каждого столбца, что приводит к более высокому коэффициенту сжатия и более быстрому выполнению запросов.


1. Как работает сжатие в ClickHouse

ClickHouse хранит данные в столбцах, что позволяет легко применять эффективные алгоритмы сжатия. Каждый столбец хранится отдельно, и похожие значения данных внутри столбца обеспечивают высокий коэффициент сжатия.

Шаги в процессе сжатия данных в ClickHouse:

  • Данные столбца группируются в блоки
    Данные хранятся в блоках гранул (по умолчанию 64 000 строк).
    Сжатие применяется к каждой грануле независимо.

  • ClickHouse выбирает алгоритм сжатия
    Пользователи могут выбирать кодеки сжатия для каждого столбца.
    По умолчанию используется LZ4, но доступны также ZSTD, Delta, DoubleDelta, Gorilla, T64 и другие.

  • Данные сжимаются и эффективно хранятся
    Производительность запросов улучшается, потому что сжатые данные требуют меньше операций ввода-вывода с диска.
    Эффективность работы процессора увеличивается, так как современные процессоры могут распаковывать данные быстрее, чем читать не сжатые данные с диска.


2. Почему сжатие эффективно в ClickHouse

1. Более высокие коэффициенты сжатия
Столбцовое хранение позволяет достичь лучшего сжатия, так как данные в столбце имеют схожие значения (например, даты, категории, целые числа).
Коэффициенты сжатия 5x-10x являются обычными, в отличие от 2x-3x в построчных базах данных.

База данныхКоэффициент сжатия
PostgreSQL (строчное хранение)2x-3x
ClickHouse (столбцовое хранение)5x-10x

2. Быстрое выполнение запросов
Поскольку сжатые данные занимают меньше места, для выполнения запросов требуется меньше операций чтения с диска, что делает их быстрее.
ClickHouse эффективно распаковывает данные в памяти, улучшая производительность.

3. Меньше использование дискового пространства
Затраты на хранение данных снижаются, потому что сжатые данные занимают меньше места на диске.
Сжатие особенно полезно для больших наборов данных (например, логов, аналитики, данных временных рядов).


3. Кодеки сжатия в ClickHouse

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

Кодек сжатияЛучше всего подходит дляКак работает
LZ4 (по умолчанию)Универсальное использованиеБыстрое сжатие/распаковка, низкое использование процессора
ZSTD (Zstandard)Лучше всего для высокого сжатияБолее интенсивное использование процессора, но лучший коэффициент сжатия
DeltaЦелочисленные данные (ID, метки времени)Хранит разницу между последовательными значениями
DoubleDeltaДанные временных рядовДальше оптимизирует кодирование Delta для плавных изменений значений
GorillaЧисла с плавающей точкойЭффективное хранение данных сенсоров, значений временных рядов
T64Данные с низкой кардинальностью (целые числа)Оптимизирован для повторяющихся последовательностей целых чисел

Пример: Установка кодека сжатия в ClickHouse

CREATE TABLE sales (
    id UInt32 CODEC(ZSTD), 
    amount Float64 CODEC(Gorilla), 
    timestamp DateTime CODEC(Delta)
) ENGINE = MergeTree()
ORDER BY timestamp;
  • ZSTD → Лучше для сжатия ID.
  • Gorilla → Оптимизирован для значений с плавающей точкой.
  • Delta → Снижает объем хранения меток времени.

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

Сценарий: Хранение логов

Набор данных с 1 миллиардом строк логов хранится в ClickHouse и PostgreSQL.

База данныхРазмер до сжатияРазмер после сжатияВремя запроса (среднее)
PostgreSQL (строчное хранение)500 ГБ250 ГБ3.5 с
ClickHouse (столбцовое хранение)500 ГБ50 ГБ0.4 с

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

✅ ClickHouse сжал данные в 5 раз больше, чем PostgreSQL.
✅ Запросы выполнялись примерно в 9 раз быстрее из-за уменьшения операций ввода-вывода с диска.
✅ Использовалось меньше места для хранения, что снижает затраты на инфраструктуру.


5. Резюме: Почему сжатие в ClickHouse эффективно

✅ Столбцовое хранение данных улучшает коэффициенты сжатия (лучше, чем в построчных базах данных).
✅ Множество кодеков сжатия позволяют настраивать сжатие в зависимости от типа данных.
✅ Быстрее выполнение запросов благодаря уменьшению операций чтения с диска и эффективной распаковке.
✅ Снижение затрат на хранение за счет компактного представления данных.