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

История ClickHouse

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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