Каковы плюсы и минусы колоночных (столбцовых) баз данных?

Ответ

Колоночные (или столбцовые) СУБД хранят данные по колонкам, а не по строкам, как традиционные реляционные БД. Это делает их узкоспециализированным инструментом для аналитических нагрузок (OLAP).

Плюсы:

  • Высокая скорость аналитических запросов: При выполнении запроса (например, SELECT AVG(price) FROM sales) СУБД читает данные только из одной колонки price, игнорируя все остальные. Это на порядки быстрее, чем чтение целых строк.
  • Эффективное сжатие данных: Данные в одной колонке, как правило, однотипны (например, числа или даты), что позволяет применять к ним высокоэффективные алгоритмы сжатия. Это экономит дисковое пространство и ускоряет чтение.
  • Оптимизация для агрегаций: Идеально подходят для агрегирующих функций (SUM, AVG, COUNT, GROUP BY), так как все необходимые значения для расчета лежат на диске последовательно.

Минусы:

  • Медленные операции записи и обновления: Добавление или изменение одной "строки" данных требует обращения к файлам множества колонок, что является дорогой операцией. Поэтому они плохо подходят для транзакционных нагрузок (OLTP).
  • Неэффективность для точечных запросов: Запросы вида SELECT * FROM table WHERE id = 123 работают медленно, так как для сборки одной строки требуется прочитать данные из множества разных колоночных файлов.
  • Ограниченная поддержка транзакций: Многие колоночные СУБД либо не поддерживают ACID-транзакции, либо имеют существенные ограничения.

Когда использовать:
Для аналитических систем, хранилищ данных (DWH), систем бизнес-аналитики (BI), мониторинга и обработки логов — везде, где преобладают сложные запросы к большим объемам данных с целью агрегации и анализа.

Популярные представители:

  • ClickHouse
  • Vertica
  • Apache Druid
  • Google BigQuery