Три урока подряд мы готовили почву: аналитика читает много строк и мало колонок, строковая база тратит силы зря, колоночная читает только нужное. Теперь познакомимся с базой, которая построена на этих идеях от первой до последней строчки кода. Это ClickHouse.
Откуда он взялся
В конце 2000-х в Яндексе делали Метрику, сервис веб-аналитики вроде Google Analytics. Каждый просмотр страницы на миллионах сайтов становился событием, и владельцы сайтов хотели видеть отчёты сразу, а не завтра утром. Готовые базы либо не тянули такой поток, либо требовали заранее считать каждый отчёт. Команда написала свою колоночную базу, которая строит отчёт по сырым событиям прямо в момент запроса.
В 2016 году ClickHouse выложили в открытый доступ под лицензией Apache 2.0, а в 2021 году вокруг него появилась отдельная компания ClickHouse, Inc. Сегодня база бесплатна и открыта, а компания продаёт облачную версию ClickHouse Cloud.
Название складывается из Clickstream и Data Warehouse: хранилище потока кликов.
Что внутри
Главные идеи ты уже знаешь, теперь назовём их своими именами:
- Колоночное хранение. Каждая колонка лежит в отдельном файле и сжата. Запрос читает только нужные колонки.
- Векторное выполнение. Данные обрабатываются пачками из десятков тысяч значений одной колонки, а не по строке. Процессор умеет складывать массивы чисел намного быстрее, чем перебирать строки.
- Все ядра и все машины. Один запрос режется на куски по ядрам процессора, а в кластере ещё и по серверам.
- Разреженный индекс. Вместо индекса на каждую строку ClickHouse помнит одну метку на несколько тысяч строк. Индекс маленький, лежит в памяти и позволяет пропускать целые куски таблицы. Подробно разберём в уроке про
ORDER BY. - Только дописывание. Новые данные пишутся новыми кусками, а старые куски в фоне сливаются в большие. Править отдельные строки можно, но дорого.
- SQL. Запросы пишутся на привычном SQL с добавками ClickHouse: сотни функций для дат, строк, массивов, приблизительные подсчёты.
урок из курса
Урок из курса «ClickHouse и аналитические базы». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.