Открыть сервис

Columnstore Indexes

Columnstore index (столбцовый индекс) — это технология хранения и индексирования данных в реляционных базах данных, при которой данные физически группируются и сжимаются не по строкам, а по столбцам. Основное назначение columnstore index — значительное ускорение выполнения аналитических запросов (OLAP) и операций агрегации над большими объёмами данных за счёт векторизованной обработки, высокого коэффициента сжатия и пропуска ненужных столбцов.

История

Первые идеи столбцового хранения данных появились в 1970-х годах в контексте систем управления базами данных (СУБД) для аналитической обработки. Однако практическая реализация стала возможна только с развитием массово-параллельных архитектур и увеличением объёмов оперативной памяти. В 2000-х годах технологии columnstore начали внедряться в коммерческие СУБД, такие как Sybase IQ, Vertica, Amazon Redshift и Google BigQuery. В 2012 году компания Microsoft представила columnstore index для своей СУБД SQL Server, начиная с версии 2012. Впоследствии аналогичные механизмы появились в PostgreSQL (расширение cstore_fdw, затем нативная реализация в версии 12), MySQL (в виде движка InnoDB с поддержкой secondary columnstore), а также в СУБД с открытым исходным кодом, таких как ClickHouse и DuckDB.

Принцип работы

В отличие от традиционных rowstore index (строчных индексов), где данные каждой строки хранятся вместе, columnstore index хранит все значения одного столбца последовательно. Это позволяет:

Физически данные в columnstore index организуются в row groups (группы строк) — обычно по 1–10 миллионов строк. Каждая группа строк делится на column segments (сегменты столбцов), которые сжимаются независимо. Для ускорения поиска по условиям используется segment elimination (исключение сегментов): если в сегменте нет значений, удовлетворяющих условию, он пропускается.

Классификация

По типу хранения

По способу обновления

Характеристики

Сжатие

Columnstore index использует несколько алгоритмов сжатия, в том числе:

Тип сжатия выбирается автоматически на основе статистики данных. Коэффициент сжатия сильно зависит от характера данных: для столбцов с низкой кардинальностью (мало уникальных значений) он может достигать 20–30 раз, для столбцов с высокой кардинальностью (например, уникальные идентификаторы) — 2–4 раза.

Производительность

Основное преимущество columnstore index — скорость выполнения аналитических запросов. По данным Microsoft, для типовых OLAP-нагрузок (агрегация по миллиардам строк) columnstore index может быть в 10–100 раз быстрее, чем эквивалентный rowstore index. Это достигается за счёт:

Ограничения

Применение

Columnstore index широко используется в системах, где требуется быстрая обработка больших объёмов данных:

Примеры использования

Интересные факты

Критика

Несмотря на преимущества, columnstore index не является универсальным решением. Критики отмечают:

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →