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

История ClickHouse

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

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

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

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

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

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

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

В настоящее время существует множество установок ClickHouse в других сервисах и подразделениях Yandex: вертикали поиска, электронная коммерция, реклама, бизнес-аналитика, мобильная разработка, персональные услуги и другие.

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

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

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

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

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

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

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

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