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

Columnstore

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

История

Концепция колоночного хранения данных была впервые предложена в 1970-х годах в рамках академических исследований, но практическое применение получила лишь в 1990-х — начале 2000-х годов с ростом объёмов корпоративных данных и потребностей бизнес-аналитики. Первыми коммерческими системами, реализовавшими columnstore, стали специализированные аналитические СУБД, такие как Sybase IQ (1995), Vertica (2005, приобретена Hewlett-Packard в 2011), C-Store (прототип, лёгший в основу Vertica), а также открытые проекты MonetDB (2002) и CrateDB.

Массовое внедрение columnstore в универсальные реляционные СУБД началось в 2010-х годах. В 2011 году Microsoft выпустила SQL Server 2012 с функцией columnstore index (некластеризованный колоночный индекс). В 2013 году PostgreSQL получил расширение cstore_fdw (Foreign Data Wrapper) для работы с колоночным хранением. В 2017 году компания MariaDB представила Storage Engine ColumnStore. В 2020-х годах колоночное хранение стало стандартной опцией в большинстве современных СУБД, включая Oracle (In-Memory Column Store), MySQL (HeatWave), Amazon Redshift, Google BigQuery и ClickHouse.

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

При columnstore-хранении данные таблицы физически разбиваются на блоки, каждый из которых содержит значения одного столбца для определённого набора строк (часто называемого «пакетом» или «вектором»). Например, таблица «Продажи» с колонками «Дата», «Товар», «Количество», «Цена» будет сохранена не как набор строк, а как четыре отдельных массива: массив дат, массив товаров, массив количеств, массив цен.

Ключевые особенности реализации:

  • Сжатие данных: значения одного столбца часто имеют одинаковый тип и повторяющиеся значения (например, категории товаров), что позволяет применять высокоэффективные алгоритмы сжатия (RLE — run-length encoding, дельта-кодирование, словарное сжатие). Степень сжатия может достигать 10–20 раз по сравнению со строчным хранением.
  • Векторная обработка: запросы обрабатываются не по одной строке, а пакетами (векторами) значений, что снижает накладные расходы на интерпретацию и позволяет использовать SIMD-инструкции процессора.
  • Минимизация ввода-вывода: при выполнении запроса, требующего только несколько столбцов (например, «сумма продаж по месяцам»), считываются только соответствующие колонки, а не вся таблица целиком. Это резко сокращает объём данных, передаваемых с диска или из памяти.
  • Хранение метаданных: для каждого блока столбца сохраняются минимальные и максимальные значения (min/max), что позволяет при фильтрации (WHERE) пропускать целые блоки, если их диапазон не пересекается с условием.

Сравнение со строчным хранением

ХарактеристикаColumnstoreRowstore (строчное хранение)
Физическая организацияДанные каждого столбца хранятся отдельноВсе поля одной строки хранятся вместе
Оптимальные нагрузкиАналитические запросы (OLAP) — агрегации, сканирование большого числа строк, фильтрация по нескольким колонкамОперационные запросы (OLTP) — вставка, обновление, удаление отдельных строк, поиск по первичному ключу
СжатиеВысокое (10–20x) за счёт однотипности данных в колонкеНизкое (1–2x) из-за разнородности типов в строке
Производительность при чтенииВысокая для запросов с малым числом колонокНизкая для аналитики (чтение всей строки)
Производительность при записиНизкая (требуется перестроение блоков, высокая задержка)Высокая (быстрая вставка строк)
Обновление данныхСложное (часто требует полной перезаписи блоков)Простое (обновление одной строки)
Типичные СУБДClickHouse, Vertica, Amazon Redshift, Google BigQuery, SQL Server (columnstore index)PostgreSQL, MySQL, Oracle, SQLite

Классификация и виды

По способу реализации

  1. Нативные колоночные СУБД: системы, изначально спроектированные для колоночного хранения (ClickHouse, Vertica, MonetDB, C-Store). Они не поддерживают строчное хранение или поддерживают его ограниченно.
  2. Гибридные СУБД: универсальные системы, которые могут хранить данные как в строчном, так и в колоночном формате (SQL Server, Oracle, MariaDB, PostgreSQL с расширениями). Пользователь может выбирать тип хранения для каждой таблицы или индекса.
  3. Расширения и индексы: columnstore как дополнительная структура данных поверх строчной таблицы (например, columnstore index в SQL Server, cstore_fdw в PostgreSQL). Позволяет сочетать преимущества обоих методов.

По типу нагрузки

  • Колоночное хранение для аналитики (OLAP): оптимизировано для чтения больших объёмов данных, агрегаций, группировок, фильтрации. Примеры: ClickHouse, Vertica, Amazon Redshift.
  • Колоночное хранение для смешанных нагрузок (HTAP): системы, поддерживающие как операционную (OLTP), так и аналитическую обработку в реальном времени. Примеры: SQL Server (с columnstore index), Oracle (In-Memory Column Store), MySQL HeatWave.

Применение

Columnstore используется в основном в системах бизнес-аналитики (BI), хранилищах данных (Data Warehouse), озёрах данных (Data Lake) и системах реального времени для аналитики. Типичные сценарии:

  • Агрегация временных рядов: расчёт сумм, средних, максимумов и минимумов по большим наборам данных (например, продажи за 5 лет, логи серверов).
  • Фильтрация и группировка: выборка данных по нескольким условиям с группировкой по категориям (например, «выручка по регионам за последний квартал»).
  • Машинное обучение и статистика: подготовка данных для обучения моделей (feature engineering), где требуется быстрое чтение отдельных признаков.
  • Отчётность и дашборды: генерация регулярных отчётов с агрегированными показателями.

Преимущества и недостатки

Преимущества

  • Высокая производительность аналитических запросов (в 10–100 раз быстрее строчного хранения на сопоставимом оборудовании).
  • Эффективное сжатие данных, снижение затрат на хранение.
  • Возможность обрабатывать терабайтные и петабайтные объёмы данных.
  • Поддержка векторной обработки и аппаратного ускорения (SIMD, GPU).

Недостатки

  • Низкая производительность при вставке, обновлении и удалении отдельных строк (OLTP-операции).
  • Сложность реализации транзакций (ACID) — многие колоночные СУБД имеют ограниченную поддержку транзакций или используют модель «сначала запись в строчный буфер, потом массовое слияние».
  • Требуется перестроение блоков при частых изменениях данных.
  • Неэффективность для запросов, требующих чтения всех столбцов (SELECT *).

Примеры реализации

  • ClickHouse (Россия, компания «Яндекс») — одна из самых популярных колоночных СУБД с открытым исходным кодом. Используется для аналитики в реальном времени, обработки логов, метрик.
  • Vertica (США, приобретена Hewlett-Packard) — коммерческая колоночная СУБД, ориентированная на корпоративные хранилища данных.
  • Amazon Redshift — облачная колоночная СУБД от Amazon Web Services, построенная на основе ParAccel.
  • Google BigQuery — бессерверная облачная аналитическая база данных с колоночным хранением.
  • SQL Server Columnstore Index — функция Microsoft SQL Server, позволяющая добавлять колоночные индексы к строчным таблицам.
  • MariaDB ColumnStore — колоночный движок хранения для MariaDB, поддерживающий распределённую архитектуру.

Критика

Основная критика columnstore связана с его непригодностью для операционных нагрузок (OLTP). Попытки создать гибридные системы (HTAP) часто приводят к компромиссам: либо падает производительность аналитики, либо ухудшается скорость транзакций. Кроме того, многие колоночные СУБД имеют ограниченную поддержку сложных JOIN-операций (особенно с несколькими таблицами) по сравнению со строчными СУБД. Дополнительным ограничением является сложность администрирования: для достижения максимальной производительности требуется правильная настройка сегментации, партиционирования и сжатия.

Источники

  • Abadi, D. J., Boncz, P. A., Harizopoulos, S. (2008). «Column-Oriented Database Systems». VLDB Journal.
  • Stonebraker, M. et al. (2005). «C-Store: A Column-oriented DBMS». Proceedings of VLDB.
  • Microsoft Docs. «Columnstore Indexes for Data Warehousing». SQL Server Documentation.
  • ClickHouse Documentation. «Columnar Storage». ClickHouse Tech Docs.
  • Vertica Documentation. «Columnar Storage and Compression». Micro Focus.
  • Amazon Redshift Documentation. «Columnar Storage and Data Compression». AWS.
  • MariaDB Documentation. «ColumnStore Storage Engine». MariaDB Knowledge Base.

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

На главную BFOmetr →