В сегодняшней публикации мы попробуем разобраться в производительности популярных MPP-движков в специализированной задаче ХД – предоставлении доступа к денормализованной витрине данных. Также ответим на вопрос: нужен ли ClickHouse в аналитическом ландшафте, спроектированном по принципу Lakehouse-платформ? Для этого будем использовать бенчмарк ClickBench.

ClickBench появился не так давно, в 2022 году. Методика создана и поддерживается командой ClickHouse. Авторы позиционируют его следующим образом -  «Этот бенчмарк представляет типичную рабочую нагрузку в следующих областях: анализ потоков кликов и трафика, веб-аналитика, машинно-генерируемые данные, структурированные журналы и данные о событиях. Он охватывает типичные запросы в ad-hoc аналитике и дашбордах реального времени». Последний сценарий вызывает у нас особый интерес, ведь редко встретишь архитектурный дизайн аналитического ландшафта, где не было бы решения на базе ClickHouse именно для этой цели, на вершине пирамиды тракта данных от источника до потребителя. 

О методике

Бенчмарк включает:

  • Набор данных, содержащий плоскую таблицу (да, именно одну табл��цу) ровно с 99 997 497 записями;

  • 43 SQL-запроса, охватывающие ряд сценариев использования аналитики в рамках чтения одной таблицы (запускаются последовательно);

  • Страница в сети;

  • Github.

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

  • Своей узкой специализированности аналитики над одной таблицей без JOIN-операций (по мнению авторов «типичные запросы в ad-hoc аналитике и дашбордах реального времени» именно такие);

  • Отсутствия конкурентной нагрузки.

Но стадарт есть стандарт, и давайте будем его придерживаться.

Тестовое окружение

  • Все тесты выполняются в Яндекс.Облаке;

  • Данные размещены в Managed S3 хранилище;

  • Формат данных parquet ZSTD Compression level 3, структура DDL полностью соответствуют методике теста;

  • 4 worker-узла, 32 vCores – каждый, и 320 Gb памяти для каждого движка;

  • ClickHouse в режиме работы над S3 использовал те же типы worker’ов.

Для теста ClickHouse c локальными дисками:

  • 4 узла;

  • 32 vCores 320 Gb RAM;

  • 1 Tb SSD-диск (самая быстрая дисковая подсистема в Яндекс.Облаке);

  • Формат данных MergreTree cо сжатием LZ4;

  • 4 distributed шарда по ключу WatchID.

Базовые версии движков:

  • ClickHouse 25.11.1.558;

  • Data Ocean Nova 2025.07:

    • StarRocks core 3.5.5;

    • Impala core 4.5;

    • Trino core 476.

Результаты

Результаты в табличном виде в разрезе каждого запроса и движка

Движок / Запрос

ClickHouse (over S3), сек

ClickHouse (MergeTree), сек

StarRocks, 2025.7.0, 3.5.5 сек

Impala, 2025.7.0, 4.5.0, сек

Trino, 2025.7.0, 476 сек

Query0

0.149

0.01

0.041

0.072

0.314

Query1

0.323

0.015

0.039

0.110

0.940

Query2

0.373

0.02

0.055

0.143

0.524

Query3

0.501

0.024

0.057

0.141

0.658

Query4

0.727

0.092

0.177

0.508

1.368

Query5

0.958

0.126

0.298

0.753

1.925

Query6

0.425

0.021

0.037

0.072

0.306

Query7

0.22

0.017

0.050

0.198

0.600

Query8

1.089

0.134

0.436

0.687

1.798

Query9

1.616

0.152

0.893

1.003

2.898

Query10

1.602

0.054

0.274

0.322

1.430

Query11

1.17

0.058

0.285

0.327

1.092

Query12

0.94

0.123

0.307

0.760

2.000

Query13

2.354

0.178

0.440

1.662

3.563

Query14

0.924

0.128

0.345

0.789

2.114

Query15

0.786

0.092

0.215

0.636

1.659

Query16

1.847

0.294

0.635

1.062

2.857

Query17

1.317

0.222

0.561

1.063

3.567

Query18

3.008

0.507

0.699

1.723

4.513

Query19

0.992

0.014

0.030

0.161

0.496

Query20

2.859

0.149

0.441

0.580

3.365

Query21

3.143

0.139

0.462

0.677

2.825

Query22

5.955

0.202

1.034

1.059

4.587

Query23

16.218

0.448

3.557

2.287

12.068

Query24

1.631

0.071

0.130

0.192

1.502

Query25

0.825

0.06

0.114

0.193

0.800

Query26

1.048

0.078

0.130

0.191

1.446

Query27

2.906

0.177

0.437

0.470

2.982

Query28

4.227

1.316

4.762

3.078

6.682

Query29

0.487

0.178

0.071

0.451

3.192

Query30

1.513

0.113

0.263

0.605

1.637

Query31

2.401

0.195

0.366

0.763

2.802

Query32

7.109

0.611

1.360

2.325

4.702

Query33

5.055

0.497

1.664

2.184

7.176

Query34

5.322

0.516

1.662

2.079

6.847

Query35

0.514

0.082

0.162

0.688

2.032

Query36

0.631

0.045

0.048

0.378

1.975

Query37

0.652

0.03

0.048

0.208

1.260

Query38

0.591

0.033

0.043

0.208

1.036

Query39

1.05

0.111

0.045

0.617

2.378

Query40

0.374

0.023

0.053

0.186

0.849

Query41

0.402

0.019

0.114

0.168

0.705

Query42

0.464

0.018

0.043

0.152

0.672

Общее время, сек

86.698

7.392

22.882

31.923

108.137

Посмотрим на агрегированные результаты на диаграмме

Общее время прохождения теста. Меньше - лучше
Общее время прохождения теста. Меньше - лучше

Нам показалось, что 100 млн записей в витрине данных – это мало. Мы решили усложнить себе задачу, так как всегда ориентированы на действительно большие данные, а не на «тест на калькуляторах», и провести еще две итерации с увеличенным объемом датасета в 50 и 100 раз, а только потом переходить к выводам. Зря мы что ли аж 4 worker-узла поднимали?

Оригинальный dataset был размножен достаточно примитивным способом – через insert-операцию оригинального датасета, но с генерацией уникальных ключей. После получения целевого объема датасета над витриной проводилась финальная операция перезаписи через Insert table overwrite as select.. Для каждого процессингового движка после этого собиралась статистика:

  • В итерации х50 получилось 4 999 874 850 строк (~5 млрд);

  • Для х100 – 9 999 749 700 строк (~10 мрд).

Давайте оценим, как объем повлиял на результаты.

Движок/

Размер набора данных

ClickHouse (over S3), сек

x50

ClickHouse (local disk), сек

x50

StarRocks, 2025.7.0, 3.5.5, сек

x50

Impala, 2025.7.0, 4.5.0, сек

x50

Trino, 2025.7.0, 476, сек

x50

x50

10357

731

567

604

3223

x100

15733

1033

1109

1100

4574

Выведем результаты на диаграмму, но для удобства масштабирования исключим аутсайдера (ClickHouse, работающий над S3-датасетом).

Время прохождения теста х50 / х100. Меньше - лучше.
Время прохождения теста х50 / х100. Меньше - лучше.

С детализацией запросов для объема данных x50 и x100 можно ознакомиться в приложении в конце статьи.

Выводы

Концепция Lakehouse декларирует, что все задачи аналитического ландшафта данных можно решить из одной коробки и нет необходимости использовать для этого стороннюю систему. Так ли это? Давайте проанализируем результаты:

  1. В подавляющем большинстве случаев при использовании современных BI-движков поверх объектного хранилища данных можно получить время отклика, сопоставимое (а часто и лучше) с временем отклика «короля bi-запросов» – ClickHouse, который использует свой внутренний формат хранения на локальной дисковой подсистеме. При этом важно помнить, что в данном тесте мы играли по правилам, придуманным ClickHouse на его, если можно так сказать, домашнем поле. Очевидно, что если правила нарушить и разбавить нагрузку запросами, содержащими JOIN-операции, то ClickHouse такие сценарии просто провалит;

  2. Trino как вычислительная технология для быстрого доступа к денормализованной витрине данных пока выглядит наименее привлекательным среди представленных в тесте движков;

  3. Использование S3 c ClickHouse все еще сопряжено с большими проблемами. Прежде всего, связанными с тем, что в S3 отсутствует привычное для ClickHouse шардирование. Открытые форматы данных требуют от разраб��тчиков изменить подход к работе движка, на что требуется значительное время (чем собственно команда ClickHouse и занимается).

Данные выводы не отменяют того факта, что ClickHouse с локальным хранением – чемпион в сценарии доступа к денормализованным данным. Однако наличие отдельно стоящего ClickHouse рядом с Lakehouse-платформой, предлагающей в качестве вычислительных технологий StarRocks или Impala, показывающих превосходный результат над S3 в данной задаче, может быть экономически и функционально не оправдано. К тому же доступность данных в витрине будет хуже, так как на перекладывание данных из S3 в ClickHouse потребуется дополнительное время и ресурсы. Да и сценарии применения ограничены из-за отсутствия нормально работающих JOIN-операций.

Данное утверждение справедливо не только для сочетания Lakehouse+ClickHousе, но и для ставшей привычной на нашем рынке связки GreenPlum+ClickHouse. Такая парадигма существовала только потому, что первая система плохо справлялась с задачами второй и наоборот. Все это привело к ухудшению доступности сервисов и увеличению общей стоимости владения. 

И последнее. Если Lakehouse-платформа данных представлена только одним Trino, и вам необходим BI-доступ к плоской витрине с минимальным откликом, то избежать подселения в зоопарк дополнительной технологии пока не представляется возможным.

Не будет лишним еще раз напомнить: выбирать Lakehouse-движок для сценариев общего применения на основании только результатов ClickBench – ошибка, так как тест имеет исключительно узкоспециализированную направленность. Держите эту мысль всегда в голове, когда изучаете маркетинговые материалы. Требуются комбинированный подход и сочетание проверочных методик тестирования.

Заключение

Мы собираемся продолжать делиться результатами функциональных и нагрузочных испытаний популярных технологий вычислений. Несмотря на то, что мы публикуем только результаты движков, используемых в платформе Data Ocean Nova с учетом доработок и изменений, мы также уделяем внимание и другим популярным MPP-технологиям, например, Doris. Однако воздерживаемся пока от публикаций и ожидаем, что другие игроки на российском рынке Big Data, разрабатывающие и предлагающие платформы данных и обладающие большой экспертизой, насмотренностью и опытом, поделятся с сообществом своими результатами.

Если у вас есть идеи, как можно разбавить ClickBench для получения более реалистичных сценариев работы (например, добавить конкурентности или расширить список запросов, среди которых будет доступ по ключу), то напишите нам, пожалуйста, в комментарии через телеграм-канал Data Sapience. Мы всегда открыты к диалогу.

Предыдущие материалы по теме нагрузочных тестирований (в порядке публикации):

Приложение. Детализация времени работы запросов на увеличенном объеме данных

Детализированная информация по тесту х50 / х100
Детализированная информация по тесту х50 / х100