Как мы считали трафик на Вертике Базы данных, системы хранения
Тезисы
"Авито" является одной из крупнейших интернет-компаний РФ. Наш сайт регистрирует сотни миллионов событий в сутки. Руководству необходима развернутая отчетность об интернет-трафике, в том числе о количестве уникальных посетителей и сессий. Отчетность должна быть очень детализированной, точной, допускать разнообразный ad-hoc анализ. Главная проблема в расчете подобной аналитики - количество уникальных посетителей не аддитивно по иерархическим измерениям (география, продуктовый каталог и т.п.).
Вертика отлично справляется с поддержкой аддитивных мер на десятках миллиардов строк исходных данных, но когда возникла необходимость поддерживать не аддитивные меры, считающиеся по иерархическим измерениям, нам пришлось реализовать аналог алгоритма MapReduce поверх SQL-движка HP Vertica.
HP Vertica самостоятельно справляется с горизонтальным партиционированием расчетов на узлы кластера, но для решения нашей задачи нам пришлось "подсказать" ей способ вертикального партиционирования на ядра серверов (многозадачность), а также - способ темпорального партиционирования. Только разбиение задачи по трем измерениям позволило добиться достаточной декомпозиции для эффективного и быстрого расчета.