![](https://habrastorage.org/getpro/habr/upload_files/55f/696/607/55f69660733255025f3aea7aa25b6a04.png)
Всем привет! На связи Business Intelligence GlowByte. Сегодня хотим поговорить о производительности системы бизнес-аналитики FineBI. Пару месяцев назад в нашем регулярном мероприятии FineTalks участвовали коллеги из ID360 и смотрели “под капот” FineBI 6.1. Хотим поделиться их инсайтами. Возможно, после сегодняшнего небольшого “разбора” движка платформы вам тоже она понадобится. ? Обращайтесь!
В 6.0, если строить визуализацию из датасетов, которые находятся в Public data (позволяет различным отделам и командам работать с одними и теми же данными, обеспечивая согласованность и единообразие в отчетности), все работало раз в 10 быстрее, чем с использованием модели данных в проекте дашборда. Поэтому заявления, что новый движок Polars быстрее в 3-5-10 раз, очень заинтересовали. Следовательно, в первую очередь хотелось сделать бенчмарки, чтобы понять, соответствуют ли обещания действительности или нет.
Итак, у нас есть модель данных: fact_table таблица фактов, связанная с dim_calendar календарем и справочником dim_drug.
![Рисунок 1. Модель данных для формата “Экстракт” и прямого подключения Direct. Рисунок 1. Модель данных для формата “Экстракт” и прямого подключения Direct.](https://habrastorage.org/getpro/habr/upload_files/feb/831/7e4/feb8317e407bfae0a65f908b04fa623a.png)
Объемы данных:
таблица фактов 150 миллионов строк,
календарь 2000 строк,
справочник 400 тысяч строк.
Это простой дашборд, он состоит из даты справочника, поля “Продажи”. Бренд берется из справочников. Всего использовали топ-10 брендов.
Для измерения скорости работы выбираем различные года.
![Рисунок 2. Simplified дашборд Рисунок 2. Simplified дашборд](https://habrastorage.org/getpro/habr/upload_files/f9a/dcd/cc7/f9adcdcc7d319f5f92a45c55beb04d9d.png)
В версии 6.0.17 мы видим разброс 15-24 секунды, на всем объеме данных – 50 секунд.
В версии 6.1 тот же самый дашборд, те же самые данные показывают лучше значения.
![Таблица 1. Сравнение работы FineBI 6.0.17 и 6.1.0 Таблица 1. Сравнение работы FineBI 6.0.17 и 6.1.0](https://habrastorage.org/getpro/habr/upload_files/f25/411/565/f254115656181ad8ea3e8be229ec099a.png)
Получаем, что в среднем в версии 6.1 дашборды будут работать в 5 раз быстрее “просто так” и ничего не нужно модифицировать, не нужно вносить никакие изменения. Обычно все радуются ускорением на каких-то 10-20 %. Здесь же разница в 5 раз!
Давайте рассмотрим более реальный дашборд с интерактивностью, например, группировкой не по месяцам, а кварталам, и чтобы показатель был не продажи, а, например, продажи в рублях или продажи в упаковках. Наша цель – чтобы дашборд был плюс-минус приближенный к реальности. Должны быть параметры-переключатели, которые позволяют пользователю под тем или иным углом смотреть на данные.
![Рисунок 3. Advanced дашборд Рисунок 3. Advanced дашборд](https://habrastorage.org/getpro/habr/upload_files/f7a/500/ab5/f7a500ab5c8544a7348f8f3491bf6408.png)
Чем отличается внутри дашборд от предыдущего? Тем, что мы, например, выносим не просто поле даты, а поле с Switch()-функцией, которое в зависимости от значения в этом переключателе будет группировать либо по месяцу, либо по кварталу, либо по году.
![Рисунок 4. Использование switch() с 3 полями в расчете периода Рисунок 4. Использование switch() с 3 полями в расчете периода](https://habrastorage.org/getpro/habr/upload_files/614/3b5/7e6/6143b57e6dda8c19b7192a97e75755e1.png)
То же самое в поле “Показатель”. Мы можем посмотреть в рублях, можем – в количестве упаковок. Вместо бренда будет измерение, выбранное пользователем. Назовем этот дашборд advanced.
Подобный дашборд работал в версии FineBI 6.0.17 раз в 5, наверное, медленнее. В 6.1 было примерно так же.
Согласитесь, что, по сути, если человек выбрал группировку по кварталу, бренду и выбрал определенный год, то конечный запрос должен выполняться дольше лишь на ту часть, которая у машины уйдет на определение этих параметров, то есть на квартал и на определение того, по какому столбцу группировать по бренду. Но в данном случае нет “ленивых вычислений” (улучшение продукта “ленивыми вычислениями” запланировано на 3-4 кв. 2024 в версиях 6.1.3-6.1.4). FineBI просто считает сразу и по кварталу, и по годам, и по месяцам, и по брендам, и по всем тем измерениям, которые есть во всех функциях switch(). Это эмпирически подтверждается.
Чем больше мы добавляем в switch() возможных вариантов выбора, тем больше растет время загрузки дашборда. Например, ClickHouse лишен такой проблемы, потому что сам ClickHouse поддерживает “ленивые вычисления”.
![Таблица 2. Сравнение работы FineBI 6.0.17 и 6.1.0. Advanced дашборд Таблица 2. Сравнение работы FineBI 6.0.17 и 6.1.0. Advanced дашборд](https://habrastorage.org/getpro/habr/upload_files/8b8/4fc/b7d/8b84fcb7d9afd1020f1750c8a9f7163f.png)
По результатам быстродействия наблюдаем, что теперь скорость работы увеличилась не в 5 раз, а в 2,8 раза, что тоже очень хорошо. То есть на ровном месте мы получаем просто в 3 раза более быстрые дашборды.
Круто, но очень ждем улучшения продукта в виде внедрения “ленивых вычислений”. Так как любую базу, даже самую быструю, можно нагрузить кривыми запросами, которые генерируются при простой условной логике.
Давайте посмотрим результаты работы при Direct/прямом подключении к ClickHouse: добавление в поле со Switch, количество измерений никак практически не влияет.
![Таблица 3. Сравнение скорости FineBI 6.1.0CN с ClickHouse Таблица 3. Сравнение скорости FineBI 6.1.0CN с ClickHouse](https://habrastorage.org/getpro/habr/upload_files/780/d01/c9a/780d01c9a09689d154c9d4816d220e88.png)
Соответственно, если бы FineBI поддерживал “ленивые вычисления”, то advanced/сложные дашборды со сложной логикой выполнялись также бы в рамках 3-4-7 секунд! Это было бы изумительно!
Надеемся, наш эксперимент был наглядным и полезным. Больше полезной информации о работе FineBI вы найдете в нашем сообществе FineBIChat.