A Look at Upcoming Innovations in Electric and Autonomous Vehicles MPP-движки сошлись в бою. Doris бросает вызов StarRocks

MPP-движки сошлись в бою. Doris бросает вызов StarRocks

MPP-движки сошлись в бою. Doris бросает вызов StarRocks

Команда Data Sapience опубликовала масштабный бенчмарк MPP-движков: Spark 4 разочаровывает, Trino неожиданно прибавляет, а Apache Doris впервые выходит на ринг

Российская команда Data Sapience выкатила очередной раунд нагрузочного тестирования MPP-движков на базе 10-терабайтного датасета TPC-DS. На этот раз в сравнении участвуют восемь претендентов - от разных версий Spark до дебютанта рейтинга Apache Doris. Результаты местами предсказуемые, местами - по-настоящему неожиданные.

Spark 4: громкое имя, скромная прибавка

Переход с Spark 3.5 на Spark 4.0.1 не даёт того прироста, на который многие рассчитывали. В однопоточном режиме четвёртая версия даже немного отстаёт - 6 часов 30 минут против 6 часов 42 минут у предшественника. При четырёх конкурентных сессиях картина схожая: Spark 4 финишировал за 19 часов 29 минут, тогда как Spark 3.5.4 - за 19 часов 21 минуту.

Реальный прирост производительности по-прежнему обеспечивает не смена мажорной версии, а нативный движок DataFusion Comet. Он стабильно добавляет около 30% скорости - и в третьей, и в четвёртой версии Spark. Вывод прост: гнаться за Spark 4 ради быстродействия пока не стоит. Переходить имеет смысл ради новой функциональности - например, Spark SQL Scripting.

Конфигурация1 поток (99 запросов)4 потока (396 запросов)
Spark 3.5.4 + Comet 0.125 ч 11 мин14 ч 9 мин
Spark 4.0.1 + Comet 0.125 ч 35 мин16 ч 1 мин
Spark 3.5.46 ч 42 мин19 ч 21 мин
Spark 4.0.16 ч 30 мин19 ч 29 мин

Trino разогрелся: полтора года не прошли даром

Куда интереснее ситуация с Trino. Версия 479 в конкурентном режиме выполняет 396 запросов за 18,8 часа - против 33,2 часа у версии 459 полугодовой давности. Это не просто улучшение. Это смена характера движка.

Ключевые изменения, которые переломили ситуацию, произошли в версиях 462-476. В 462-м и 463-м переработали протокол внутренних коммуникаций: теперь запросы мультиплексируются поверх одного соединения, уходят лишние блокировки при интенсивном shuffle. В 465-й улучшили работу с Iceberg при многократном сканировании одной таблицы - именно это даёт выигрыш на запросах с CTE-выражениями, которых в TPC-DS предостаточно. Версия 476 дополнительно ускорила lookup-соединения по справочным таблицам.

Trino традиционно страдал при конкурентной нагрузке. Похоже, разработчики наконец всерьёз взялись за это больное место.

Apache Doris: дебютант с историей

Самый любопытный участник нынешнего забега - Apache Doris. В рейтинг он попал по двум причинам: русскоязычное сообщество Data Engineers давно просило включить его в сравнение, а публичных бенчмарков с его участием на русскоязычном рынке попросту нет.

У Doris, StarRocks и Impala - общие корни. Ещё на стадии инкубации Doris позиционировал себя как синтез идей Google Mesa (движок хранения) и Impala (процессинг). Front End объединил оптимизатор, координатор и каталог в единый компонент. В 2020 году часть команды решила форкнуться и создала StarRocks - с прицелом на переписывание движка с нуля вместо инкрементального развития. Классический инженерный раскол: эволюция против революции.

  • Doris: наследник Palo от Baidu, сохраняет обратную совместимость и широкую экосистему
  • StarRocks: форк 2020 года, ставка на нативную производительность и переработанное ядро
  • Impala: оригинальный источник идей процессинга, используется в Nova в версии на ядре 4.5

Тестирование проводилось в Яндекс.Облаке на кластерах из четырёх worker-узлов с 16 vCPU и 300 ГБ RAM каждый - суммарно 128 ядер и 1,2 ТБ памяти. Данные в формате Parquet со сжатием ZSTD, табличный формат Iceberg, объём в сжатом виде - около 2 ТБ. Это принципиально: никаких тестов на одном узле и никакого последовательного прогона запросов. Только кластер, только конкурентная нагрузка - четыре параллельных потока с индивидуальными наборами запросов.