Ответ
Колоночные (или столбцовые) СУБД хранят данные не по строкам, как традиционные реляционные БД, а по столбцам. Вместо того чтобы хранить [id_1, name_1, age_1]
, [id_2, name_2, age_2]
, они хранят [id_1, id_2, ...]
, [name_1, name_2, ...]
, [age_1, age_2, ...]
.
Это дает кардинальные преимущества для аналитических нагрузок (OLAP).
Ключевые преимущества:
Высокая скорость аналитических запросов. Когда вам нужно посчитать среднее значение по одному столбцу (например,
AVG(price)
), базе данных нужно прочитать данные только из этого одного столбца, а не сканировать все поля каждой строки. Это на порядки сокращает объем I/O операций.Эффективное сжатие данных. Данные в одном столбце однотипны (например, только числа или только даты), что позволяет применять к ним специализированные и очень эффективные алгоритмы сжатия. Это экономит дисковое пространство и ускоряет чтение.
Основные сценарии использования:
- Аналитические платформы и Data Warehouses (DWH): обработка огромных массивов исторических данных.
- Business Intelligence (BI): построение отчетов и дашбордов в реальном времени.
- Системы мониторинга, обработка логов и временных рядов (time-series).
Популярные примеры: ClickHouse, Vertica, Amazon Redshift, Google BigQuery.
Недостатки:
Колоночные БД плохо подходят для транзакционных нагрузок (OLTP), где требуется частое добавление или обновление отдельных строк. Модификация одной "записи" требует внесения изменений во множество отдельных файлов-колонок, что является дорогой операцией.