История ClickHouse
ClickHouse был изначально разработан для поддержки Yandex.Metrica, второй по величине платформы веб-аналитики в мире, и продолжает быть ее основным компонентом. С более чем 13 триллионами записей в базе данных и более 20 миллиардами событий ежедневно, ClickHouse позволяет генерировать пользовательские отчеты на лету непосредственно из неагрегированных данных. В этой статье кратко рассматриваются цели ClickHouse на ранних этапах его разработки.
Yandex.Metrica строит настраиваемые отчеты на лету на основе хитов и сессий с произвольными сегментами, определяемыми пользователем. Для этого часто требуется строить сложные агрегаты, такие как количество уникальных пользователей, при этом новые данные для создания отчетов поступают в реальном времени.
На апрель 2014 года, Yandex.Metrica отслеживала около 12 миллиардов событий (просмотры страниц и клики) ежедневно. Все эти события необходимо было хранить, чтобы строить пользовательские отчеты. Один запрос мог потребовать сканирования миллионов строк за несколько сотен миллисекунд или сотен миллионов строк всего за несколько секунд.
Использование в Yandex.Metrica и других сервисах Яндекса
ClickHouse выполняет несколько функций в Yandex.Metrica. Его основной задачей является создание отчетов в онлайн-режиме с использованием неагрегированных данных. Он использует кластер из 374 серверов, который хранит более 20.3 триллиона строк в базе данных. Объем сжатых данных составляет около 2 ПБ, не учитывая дубликаты и реплики. Объем несжатых данных (в формате TSV) составит примерно 17 ПБ.
ClickHouse также играет ключевую роль в следующих процессах:
- Хранение данных для воспроизведения сессий из Yandex.Metrica.
- Обработка промежуточных данных.
- Создание глобальных отчетов с помощью аналитики.
- Выполнение запросов для отладки движка Yandex.Metrica.
- Анализ логов из API и пользовательского интерфейса.
В настоящее время существует несколько десятков установок ClickHouse в других сервисах и подразделениях Яндекса: поисковые вертикали, электронная коммерция, реклама, бизнес-аналитика, мобильная разработка, персональные сервисы и др.
Агрегированные и неагрегированные данные
Существует широко распространенное мнение о том, что для эффективного расчета статистики необходимо агрегировать данные, поскольку это снижает объем данных.
Однако агрегация данных имеет множество ограничений:
- Необходимо иметь заранее определенный список необходимых отчетов.
- Пользователь не может создавать пользовательские отчеты.
- При агрегации по большому количеству различных ключей объем данных едва уменьшается, в результате агрегация оказывается бесполезной.
- Для большого количества отчетов существует слишком много вариантов агрегации (комбинаторный взрыв).
- При агрегации ключей с высокой кардинальностью (таких как URL) объем данных не уменьшается значительно (менее чем вдвое).
- По этой причине объем данных при агрегации может вырасти вместо уменьшения.
- Пользователи не просматривают все отчеты, которые мы генерируем для них. Большая часть этих расчетов оказывается бесполезной.
- Логическая целостность данных может быть нарушена для различных агрегаций.
Если мы не агрегируем ничего и работаем с неагрегированными данными, это может снизить объем расчетов.
Однако при агрегации значительная часть работы выполняется оффлайн и завершается относительно спокойно. В отличие от этого, онлайн-расчеты требуют максимально быстрого выполнения, поскольку пользователь ожидает результата.
Yandex.Metrica имеет специализированную систему агрегации данных под названием Metrage, которая использовалась для большинства отчетов. Начиная с 2009 года, Yandex.Metrica также использовала специализированную OLAP базу данных для неагрегированных данных под названием OLAPServer, которая ранее использовалась для конструктора отчетов. OLAPServer хорошо работал с неагрегированными данными, но имел много ограничений, которые не позволяли использовать его для всех отчетов по желанию. К ним относились отсутствие поддержки типов данных (только числа) и невозможность инкрементного обновления данных в реальном времени (это можно было сделать только путем переписывания данных ежедневно). OLAPServer не является СУБД, а является специализированной базой данных.
Первоначальной целью ClickHouse было устранение ограничений OLAPServer и решение проблемы работы с неагрегированными данными для всех отчетов, но с течением времени он расширился до системы управления базами данных общего назначения, подходящей для широкого спектра аналитических задач.