Что такое колоночные базы данных и почему они лучше для аналитики
Что проверяют
Понимаете ли вы, откуда берётся выигрыш колоночного хранения, и готовы ли назвать границы утверждения из вопроса. Ответ «колоночные быстрее» без условий показывает, что человек повторяет рекламу, а не выбирал хранилище под задачу.
Как отвечать
В строковом хранении рядом лежат значения одной записи, в колоночном рядом лежат значения одной колонки. Отсюда три эффекта: читается только то, что запрошено; однородные данные сжимаются в разы лучше (словарь, повторы, дельта); обработка идёт блоками по колонке, векторно, со сборкой строки в самом конце.
Роль индексов играют сортировка и разрежённые структуры: минимумы и максимумы по блокам, фильтры Блума, ключ сортировки и партиционирование. Запрос сначала отбрасывает блоки целиком и только потом читает оставшиеся колонки, поэтому порядок записи данных влияет на скорость сильнее, чем в строковых системах.
Границы называть обязательно. Плохо даются точечный доступ по ключу со всеми полями, частые одиночные вставки и обновления, удаления (обычно это пометка и фоновое слияние), транзакции на несколько строк, схемы с множеством соединений мелких таблиц. Значит, преимущество верно для сканирующих агрегатов по нескольким колонкам на больших объёмах.
Из конкретики уместны ClickHouse, Vertica, DuckDB, форматы Parquet и ORC, а также колоночные движки внутри строковых СУБД.
Где спотыкаются
Относят к колоночным широкие хранилища вроде Cassandra или HBase. Там данные группируются по ключу партиции и модель рассчитана на точечный доступ, а не на сканирующие агрегаты, и по нагрузке это почти противоположный класс.
Объясняют выигрыш одним сжатием и упускают главное: непрочитанные колонки не стоят ничего. Поэтому выборка всех полей по широкой таблице обнуляет преимущество, а привычка писать звёздочку в запросе стоит дороже, чем кажется.
Переносят привычки строковых баз: точечные обновления по одной строке, поток мелких вставок, вторичные индексы на каждый фильтр. Загружать надо пачками, изменения оформлять новой версией или заменой партиции, а фильтрацию закладывать в ключ сортировки.