Перейти к основному содержанию
Перейти к основному содержанию

История ClickHouse

ClickHouse изначально разрабатывался для работы в составе Yandex.Metrica, второй по размеру платформы веб-аналитики в мире, и по-прежнему является её ключевым компонентом. Имея более 13 триллионов записей в базе данных и более 20 миллиардов событий ежедневно, ClickHouse позволяет на лету формировать произвольные отчёты непосредственно по неагрегированным данным. В этой статье кратко рассматриваются цели ClickHouse на ранних этапах его разработки.

Yandex.Metrica динамически формирует настраиваемые отчёты по хитам и сессиям с произвольными сегментами, задаваемыми пользователем. Для этого часто требуется вычислять сложные агрегаты, такие как количество уникальных пользователей, причём новые данные для построения отчётов поступают в режиме реального времени.

По состоянию на апрель 2014 года Yandex.Metrica регистрировала около 12 миллиардов событий (просмотров страниц и кликов) в день. Все эти события необходимо было хранить, чтобы формировать настраиваемые отчёты. Один запрос мог требовать сканирования миллионов строк за несколько сотен миллисекунд или сотен миллионов строк всего за несколько секунд.

Использование в Yandex.Metrica и других сервисах Yandex

ClickHouse используется в Yandex.Metrica для решения нескольких задач. Его основная задача — построение отчетов в режиме реального времени на основе неагрегированных данных. Для этого используется кластер из 374 серверов, на которых хранится более 20,3 триллиона строк в базе данных. Объем сжатых данных составляет около 2 PB, без учета дубликатов и реплик. Объем несжатых данных (в формате TSV) составил бы примерно 17 PB.

ClickHouse также играет ключевую роль в следующих процессах:

  • Хранение данных для Session Replay в Yandex.Metrica.
  • Обработка промежуточных данных.
  • Построение глобальных отчетов в сервисе Analytics.
  • Выполнение запросов для отладки движка Yandex.Metrica.
  • Анализ логов из API и пользовательского интерфейса.

В настоящее время в других сервисах и подразделениях Yandex — поисковых вертикалях, e-commerce, рекламе, бизнес-аналитике, мобильной разработке, персональных сервисах и других — развернуто несколько десятков установок ClickHouse.

Агрегированные и неагрегированные данные

Существует широко распространённое мнение, что для эффективного расчёта статистики необходимо агрегировать данные, так как это уменьшает объём данных.

Однако агрегация данных имеет множество ограничений:

  • Необходимо иметь заранее определённый список требуемых отчётов.
  • Пользователь не может строить произвольные отчёты.
  • При агрегации по большому количеству различных ключей объём данных почти не уменьшается, поэтому агрегация бесполезна.
  • При большом количестве отчётов возникает слишком много вариантов агрегирования (комбинаторный взрыв).
  • При агрегации ключей с высокой кардинальностью (таких как URL) объём данных уменьшается незначительно (менее чем вдвое).
  • По этой причине объём агрегированных данных может расти, а не уменьшаться.
  • Пользователи не просматривают все отчёты, которые мы для них строим. Значительная часть этих вычислений оказывается бесполезной.
  • Логическая целостность данных может нарушаться при различных вариантах агрегации.

Если мы ничего не агрегируем и работаем с неагрегированными данными, это может уменьшить объём вычислений.

Однако при использовании агрегации существенная часть работы выполняется офлайн и завершается в относительно спокойном режиме, тогда как онлайн-вычисления требуют максимально быстрой обработки, так как пользователь ждёт результат.

В Yandex.Metrica есть специализированная система для агрегации данных под названием Metrage, которая использовалась для большинства отчётов. Начиная с 2009 года, Yandex.Metrica также использовала специализированную OLAP-базу данных для неагрегированных данных под названием OLAPServer, которая ранее применялась для конструктора отчётов. OLAPServer хорошо работал с неагрегированными данными, но имел множество ограничений, не позволявших использовать его для всех отчётов, как того хотелось бы. Среди них — отсутствие поддержки типов данных (только числа) и невозможность инкрементально обновлять данные в режиме реального времени (это можно было делать только путём ежедневной перезаписи данных). OLAPServer — это не СУБД, а специализированная БД.

Изначальной целью создания ClickHouse было снять ограничения OLAPServer и решить задачу работы с неагрегированными данными для всех отчётов, но за прошедшие годы он вырос в универсальную систему управления базами данных, подходящую для широкого круга аналитических задач.