Сравните реляционные и колоночные базы данных. В чем их ключевые различия?

Ответ

Реляционные и колоночные базы данных fundamentally отличаются способом хранения и обработки данных, что делает их подходящими для разных задач.

Реляционные (Row-based) БД хранят данные строками. Каждая строка представляет собой единую запись со всеми ее атрибутами. Они оптимизированы для транзакционных операций (OLTP).

Колоночные (Column-based) БД хранят данные столбцами. Все значения одного столбца хранятся вместе. Они оптимизированы для аналитических запросов (OLAP).

Вот ключевые различия в виде таблицы:

Характеристика Реляционные БД (Row-based) Колоночные БД (Column-based)
Модель хранения Данные хранятся по строкам (вся запись целиком). Данные хранятся по колонкам (значения одного поля вместе).
Основной сценарий OLTP (Online Transaction Processing): частые операции чтения, записи и обновления отдельных строк. OLAP (Online Analytical Processing): агрегация и анализ больших объемов данных по нескольким колонкам.
Скорость чтения Быстрое чтение всей строки (SELECT * ...). Очень быстрое чтение данных из конкретных колонок (SELECT column1, column2 ...).
Скорость записи Быстрая вставка или обновление целой строки. Медленная, так как нужно записать данные в файлы разных колонок.
Сжатие данных Менее эффективное, так как в одной строке хранятся разные типы данных. Очень эффективное, так как однотипные данные в колонке хорошо сжимаются.
Примеры PostgreSQL, MySQL, Oracle, MS SQL Server. ClickHouse, Vertica, Google BigQuery, Apache Cassandra (гибрид).

Простой пример: Запрос SELECT AVG(price) FROM products в колоночной БД прочитает только один столбец price, что будет в разы быстрее, чем в реляционной, которая (упрощенно) будет вынуждена пройти по всем строкам, даже если другие поля не нужны.