Перейти к содержимому
2 / 10

Колоночное хранение: почему оно быстрее для аналитики и где проигрывает?

Колоночное хранение кладёт рядом значения одной колонки, а не одной строки. Отсюда три источника ускорения. Чтение только нужного: запрос по трём колонкам из сорока читает три колонки, а не всю таблицу — на широких таблицах это разница в порядок. Сжатие: соседние значения одной колонки однотипны и часто повторяются, поэтому работают дельта-кодирование, словарное сжатие и RLE; коэффициент 5–20× обычен, а меньше данных на диске означает меньше ввода-вывода. Векторизованное выполнение: колонка — это непрерывный массив, который обрабатывается блоками, а не построчно, что даёт эффективное использование кэша процессора и SIMD. Проигрывает колоночное хранение там, где нужна вся строка: точечное чтение по ключу собирает значение из десятков мест, а обновление одной строки требует переписывания блоков. Поэтому колоночные системы почти всегда append-only с отложенным слиянием, а не заменой на месте.

Колоночное хранение: почему оно быстрее для аналитики и где проигрывает? | JScriptiser