Получить доступ

Почему колоночное хранение выигрывает у строчного в аналитических нагрузках?

MiddleКолоночные БД
Ещё спрашивают так:
  • Почему ClickHouse быстрый на аналитике?
Коротко

Читаются только нужные колонки, они сжимаются в разы лучше и обрабатываются векторно блоками. Точечные вставки и обновления, наоборот, дорогие.

  • Запрос по 3 колонкам из 100 читает ~3% данных
  • Однотипные значения: словари, RLE, дельта-кодирование
  • Данные пишут пачками; изменения — асинхронными мутациями

А ещё Типичная схема: OLTP-база → CDC → колоночное хранилище

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

В аналитике типичный запрос трогает несколько колонок, но миллионы строк, поэтому решающим становится объём прочитанных данных. Колоночный формат позволяет не поднимать лишнее и жать значения одного типа специализированными методами. Обратная сторона — операции, естественные для OLTP: вставка одной строки затрагивает все колоночные файлы, а обновление и удаление отдельной записи дороги, поэтому такие системы ориентированы на пакетную загрузку и почти не изменяемые данные. Отсюда стандартное разделение: транзакционная нагрузка живёт в строчной СУБД, а данные для аналитики переливают в колоночное хранилище.

Что хотят услышать

  • Три причины выигрыша.
  • Цена для точечных операций.
  • Типичная архитектура.

Частые ошибки

  • Использовать колоночное хранилище как основную транзакционную базу.
  • Ожидать от него быстрых точечных обновлений и удалений.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Запрос читает только нужные колонки, а не строку целиком — при выборке трёх полей из сотни экономия огромна
  • ✓Однотипные значения в колонке сжимаются в разы лучше, чем разнородные поля строки
  • ✓Агрегации выполняются над плотными массивами значений, что позволяет обрабатывать данные пакетами
  • ✗Колоночное хранение ускоряет точечное обновление отдельной строки

Что спросят дальше

  • Чем OLTP-нагрузка принципиально отличается от OLAP?
  • Как данные обычно попадают из транзакционной базы в аналитическую?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем