История 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 и решение проблемы работы с неагрегированными данными для всех отчетов, но с течением времени он превратился в универсальную систему управления базами данных, подходящую для широкого спектра аналитических задач.