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

Колоночная база данных

Колоночная база данных (столбцовая СУБД, column-oriented DBMS) — это система управления базами данных, которая хранит данные в таблицах не по строкам (как традиционные реляционные СУБД), а по столбцам. В колоночной базе все значения одного столбца (атрибута) хранятся физически последовательно, что позволяет эффективно обрабатывать запросы, затрагивающие лишь небольшое подмножество столбцов таблицы, особенно в задачах аналитической обработки больших объёмов данных (OLAP).

Основные принципы и архитектура

В классической строко-ориентированной СУБД (например, PostgreSQL, MySQL) каждая запись (строка) хранится как единый блок на диске. При выполнении запроса, который выбирает только несколько столбцов из таблицы с сотнями атрибутов, системе приходится считывать с диска все поля каждой строки, включая ненужные, что приводит к избыточному вводу-выводу.

В колоночной модели данные каждого столбца хранятся отдельно. Например, для таблицы «Продажи» (дата, товар, количество, цена) файл date.col будет содержать все даты, product.col — все названия товаров и т.д. При запросе SELECT SUM(price) FROM Sales WHERE date > '2024-01-01' считываются только файлы столбцов date и price, что резко сокращает объём считываемой информации.

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

История

Идея колоночного хранения данных возникла задолго до появления современных реляционных СУБД. Первые системы, такие как Multics (1960-е годы) и IBM System R (1970-е), экспериментировали с вертикальной фрагментацией таблиц. Однако практическое применение началось в 1990-х годах в области хранилищ данных и аналитических систем.

В 1990-х годах появились первые коммерческие колоночные СУБД: Sybase IQ (ныне SAP IQ) и Red Brick Warehouse. Настоящий прорыв произошёл в 2000-х годах с развитием технологий массово-параллельной обработки (MPP) и больших данных. В 2005 году вышла C-Store (прототип, позже коммерциализированный как Vertica), в 2008 году — MonetDB и Vectorwise (Actian Vector). В 2010-х годах колоночные базы стали основой для облачных аналитических сервисов: Amazon Redshift (2012), Google BigQuery (2011), Snowflake (2014). В России также разрабатываются колоночные системы, например, YDB (Яндекс) и Arenadata DB (на базе Greenplum).

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

Колоночные базы данных можно разделить на несколько типов:

По способу организации хранения

  • Чисто колоночные СУБД — хранят все данные исключительно по столбцам (MonetDB, Vertica, ClickHouse).
  • Гибридные СУБД — поддерживают как строковое, так и колоночное хранение, позволяя выбирать оптимальный формат для каждой таблицы (Oracle Database с опцией In-Memory, PostgreSQL с расширением cstore_fdw).
  • Колоночные хранилища на основе строковых СУБД — используют колоночное сжатие поверх строкового хранения (Microsoft SQL Server с Columnstore Indexes).

По области применения

  • OLAP-системы (Online Analytical Processing) — ориентированы на сложные аналитические запросы, агрегации, многомерный анализ. Примеры: ClickHouse, Greenplum, Amazon Redshift.
  • Системы реального времени (Real-time Analytics) — оптимизированы для приёма и анализа потоковых данных с минимальной задержкой. Примеры: Apache Druid, InfluxDB (для временных рядов).
  • Универсальные платформы — поддерживают как аналитику, так и транзакционную нагрузку (HTAP — Hybrid Transactional/Analytical Processing). Примеры: SAP HANA, Google AlloyDB.

Преимущества колоночных баз данных

  1. Высокая скорость аналитических запросов. Благодаря чтению только нужных столбцов и эффективному сжатию, запросы на агрегацию (SUM, AVG, COUNT) выполняются в десятки и сотни раз быстрее, чем в строковых СУБД.
  2. Эффективное сжатие данных. Однотипные значения в столбце сжимаются в 5–10 раз и более (словарное кодирование, дельта-кодирование, run-length encoding). Это снижает затраты на хранение и ускоряет чтение.
  3. Оптимизация для массовой обработки. Колоночные СУБД часто используют векторные инструкции процессора (SIMD) и параллельные алгоритмы, что позволяет обрабатывать миллиарды строк за секунды.
  4. Масштабируемость. Многие колоночные системы (например, Greenplum, ClickHouse) поддерживают горизонтальное масштабирование (sharding) и распределённое выполнение запросов на кластерах из сотен узлов.

Недостатки и ограничения

  1. Низкая производительность при вставке отдельных строк. Операции INSERT, UPDATE и DELETE (особенно точечные) в колоночных базах выполняются медленно, так как требуют перезаписи целых столбцов. Для решения этой проблемы часто используются буферные таблицы (вставка в строковую таблицу, затем периодическая загрузка в колоночный формат).
  2. Неэффективность для OLTP-нагрузок. Транзакционные системы (запросы на чтение одной записи, частые обновления) работают на колоночных СУБД плохо. Для таких задач по-прежнему применяются строковые СУБД (PostgreSQL, MySQL).
  3. Сложность реализации полнотекстового поиска. Поиск по тексту в колоночных базах менее эффективен, чем в специализированных поисковых движках (Elasticsearch).
  4. Потребление памяти при работе с большими столбцами. При выполнении запроса, затрагивающего много столбцов, колоночная СУБД может потреблять больше оперативной памяти, чем строковая, из-за необходимости объединять данные из разных столбцов.

Применение

Колоночные базы данных являются стандартом де-факто для современных аналитических систем:

  • Бизнес-аналитика (BI) — построение отчётов, дашбордов, анализ продаж, финансов, маркетинга.
  • Хранилища данных (Data Warehouse) — централизованное хранение и агрегация данных из множества источников.
  • Обработка логов и событий — анализ действий пользователей, системных журналов, телеметрии.
  • Научные вычисления — обработка результатов экспериментов, геномные данные, астрономические наблюдения.
  • Интернет вещей (IoT) — анализ потоков данных с датчиков и устройств.
  • Рекламные и рекомендательные системы — расчёт статистики, сегментация аудитории.

Примеры колоночных СУБД

СУБДРазработчикТипОсобенности
ClickHouseЯндекс (Россия)Чисто колоночная, OLAPВысокая скорость вставки, поддержка SQL, распределённая архитектура
VerticaMicro Focus (Vertica)Чисто колоночная, MPPПоддержка проекций, автоматическое сжатие, SQL-совместимость
Amazon RedshiftAmazon Web ServicesГибридная, облачнаяПолностью управляемый сервис, интеграция с экосистемой AWS
Google BigQueryGoogle CloudБессерверная, колоночнаяАвтоматическое масштабирование, плата за объём обработанных данных
SnowflakeSnowflake Inc.Гибридная, облачнаяРазделение хранения и вычислений, поддержка полуструктурированных данных
Apache DruidApache Software FoundationКолоночная, real-timeОптимизирована для потоковых данных и временных рядов
GreenplumPivotal / VMwareMPP, колоночная (на основе PostgreSQL)Поддержка сложных запросов, масштабирование до тысяч узлов

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

  • ClickHouse, разработанный в Яндексе, изначально создавался для аналитики рекламных логов и с 2016 года распространяется как open-source. Он используется в России и мире для обработки петабайтов данных.
  • Amazon Redshift был запущен в 2012 году и стал одним из первых облачных сервисов для аналитики, предложив колоночное хранение по цене, значительно ниже традиционных решений.
  • Snowflake в 2020 году провёл крупнейшее IPO в истории софтверных компаний (рыночная капитализация превысила $70 млрд), что свидетельствует о высоком спросе на облачные колоночные базы.
  • В колоночных базах часто используется LZ4-сжатие (алгоритм, разработанный в России), которое обеспечивает высокую скорость при хорошей степени сжатия.

Критика

Несмотря на широкое распространение, колоночные базы данных подвергаются критике за:

  • Сложность администрирования — настройка сжатия, распределения данных, оптимизация запросов требуют высокой квалификации.
  • Неэффективность для смешанных нагрузок — попытки создать универсальную HTAP-систему (например, SAP HANA) часто приводят к компромиссам в производительности.
  • Высокую стоимость — лицензирование коммерческих колоночных СУБД (Vertica, Greenplum) может быть дорогим, особенно для крупных кластеров.

Источники

  • Stonebraker, M., et al. "C-Store: A Column-oriented DBMS." VLDB, 2005.
  • Abadi, D. J., et al. "Column-Stores vs. Row-Stores: How Different Are They Really?" SIGMOD, 2008.
  • Документация ClickHouse (clickhouse.com/docs/ru).
  • Документация Amazon Redshift (docs.aws.amazon.com/redshift).
  • Документация Snowflake (docs.snowflake.com).
  • "Database Internals: A Deep Dive into How Distributed Data Systems Work" by Alex Petrov, O'Reilly Media, 2019.

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

На главную BFOmetr →