Skip to main content
После того как мы рассмотрели запросы к нашему набору данных со статистикой Википедии, перейдём к оптимизации эффективности его хранения в ClickHouse. В этом разделе показаны практические приёмы, позволяющие сократить потребность в хранилище без ущерба для производительности запросов.

Оптимизация типов

Общий подход к повышению эффективности хранения — использовать оптимальные типы данных. Возьмём столбцы project и subproject. Эти столбцы имеют тип String, но содержат относительно небольшое количество уникальных значений:
Это означает, что мы можем использовать тип данных LowCardinality(), в котором применяется словарное кодирование. Благодаря этому ClickHouse хранит внутренний идентификатор значения вместо исходного строкового значения, что, в свою очередь, позволяет существенно экономить место:
Мы также использовали тип UInt64 для столбца hits, который занимает 8 байт, хотя его максимальное значение сравнительно невелико:
Учитывая это, вместо него можно использовать UInt32: он занимает всего 4 байта и позволяет хранить значения до ~4 млрд:
Это уменьшит размер этого столбца в памяти как минимум в два раза. При этом размер на диске не изменится благодаря сжатию. Но будьте внимательны: не выбирайте слишком маленькие типы данных!

Специализированные кодеки

При работе с последовательными данными, например временными рядами, можно дополнительно повысить эффективность хранения с помощью специальных кодеков. Общая идея заключается в том, чтобы хранить изменения между значениями, а не сами абсолютные значения, что позволяет значительно сократить занимаемое место при работе с медленно меняющимися данными:
Мы использовали кодек Delta для столбца time, который хорошо подходит для временных рядов. Правильно выбранный ключ упорядочивания также может сэкономить место на диске. Поскольку фильтрация обычно выполняется по пути, мы добавим path в ключ сортировки. Для этого потребуется пересоздать таблицу. Ниже показана команда CREATE для исходной и оптимизированной таблиц:
И давайте посмотрим, сколько места занимают данные в каждой таблице:
Оптимизированная таблица в сжатом виде занимает чуть более чем в 4 раза меньше места.
Последнее изменение 3 июля 2026 г.