Колоночные базы данных
Столбцы можно хранить вместе
В обычной row-oriented базе значения одной строки физически удобно читать вместе. Column-oriented database организует хранение так, чтобы значения одного столбца находились рядом. Это особенно полезно для аналитических запросов, которые читают миллионы строк, но используют лишь несколько полей.
row storage: [id, time, country, amount] [id, time, country, amount]
column storage: [id, id, ...] [time, time, ...] [country, country, ...]
Аналитике редко нужна вся строка
Представим таблицу событий с десятками полей.
Запрос «сумма продаж по странам за месяц» может использовать только country, amount и время.
Колоночное хранение позволяет не читать остальные поля для каждой записи.
Одинаковые типы значений рядом также хорошо сжимаются, что уменьшает объём чтения с диска и сети.
OLAP и OLTP имеют разные приоритеты
Онлайн-транзакционная нагрузка обычно выполняет множество небольших операций над конкретными записями. Аналитическая нагрузка, наоборот, часто сканирует большие диапазоны и агрегирует огромные наборы данных.
Колоночные системы хорошо подходят второй модели. Это не означает, что любая колоночная база должна становиться основной базой пользовательских транзакций.
Данные часто загружаются пакетами
Для аналитического хранилища естественен поток, где события сначала возникают в операционных системах, а затем попадают в аналитическое хранилище для отчётов, агрегаций и исследований.
operational systems -> data pipeline -> column store -> analytics