Ответ
Колоночные (или столбцовые) СУБД хранят данные по колонкам, а не по строкам, как традиционные реляционные БД. Это делает их узкоспециализированным инструментом для аналитических нагрузок (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