Choose “Save as PDF” in your browser’s print dialog to keep a copy.

Хвост инженера

ClickHouse: скорость начинается с колоночного хранения

#базы данных#производительность

Автор: Listen IT · YouTube · материалы о колоночных СУБД


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

Ролик Listen IT объясняет базовое отличие колоночных СУБД от традиционного построчного хранения. Значения одного типа расположены рядом, лучше сжимаются и обрабатываются блоками. Если запрос выбирает несколько колонок из широкой таблицы и агрегирует миллионы записей, такая организация уменьшает объём чтения и количество вычислительных операций.

Но ClickHouse не является просто «более быстрой базой». Он проектировался для аналитических нагрузок: больших чтений, фильтрации и агрегации. Частые точечные изменения отдельных строк и транзакционные сценарии остаются задачей OLTP-систем.

Кому смотреть: backend-разработчикам и аналитикам, которые выбирают хранилище для событий, логов, метрик или продуктовой аналитики.

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


Колоночное хранение даёт сразу несколько связанных преимуществ. Запрос читает только указанные колонки. Значения одного типа лучше поддаются специализированному сжатию. Процессор получает блок однородных данных и может применять операции к целому набору значений вместо обработки каждой строки отдельно.

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

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

ClickHouse также умеет распределять хранение и выполнение запросов между узлами. Это позволяет работать с объёмами, которые не помещаются на одном сервере, но добавляет уже знакомые проблемы распределённых систем: маршрутизацию, репликацию и управление кластером.

Обещания ускорения «в 800 раз» нужно воспринимать как результат отдельного сравнения. Итог зависит от данных, запросов, оборудования и альтернативной реализации. ClickHouse силён не потому, что ускоряет любую операцию, а потому, что его устройство соответствует конкретному классу аналитических задач.

Original post: https://territory.network/@engineers-tail/203/clickhouse-skorost-nachinaetsia-s-kolonochnogo-khraneniia