StarRocks vs Trino: что и когда выбирать

Trino примеры курсы обучение, Архитектура данных курсы примеры обучение, дата-инженерия и архитектура данных примеры курсы обучение, Школа Больших Данных Учебный Центр Коммерсант

Что общего у StarRocks с Trino, чем они отличаются, когда и что выбирать для практического использования: сравниваем движки для быстрой аналитики больших данных из Data Lake.

Чем похожи StarRocks и Trino

Вчера мы разбирали, что такое StarRocks, как устроена и где пригодится эта высокопроизводительная аналитическая база данных с открытым исходным кодом. Однако, помимо хранения данных, StarRocks может использоваться как вычислительный движок для аналитических запросов к внешним системам без фактического импорта данных. Это похоже на сценарий использования Trino, который также позволяет анализировать данные в реляционных и нереляционных источниках с помощью SQL-запросов без копирования записей. Помимо SQL-интерфейса, оба фреймворка имеют REST API, позволяя обращаться к ним с помощью HTTP-запросов. Впрочем, это не единственные сходства StarRocks с Trino.

Оба проекта имеют открытый исходный код и массово-параллельную архитектуру (MPP, Massively Parallel Processing), когда запрос разделяется на несколько логических и физических блоков, которые выполняются одновременно на нескольких узлах. Благодаря этому ресурсы всех узлов кластера утилизируются максимально эффективно, позволяя быстро обрабатывать петабайтные объемы данных.

Оба движка имеют оптимизатор SQL-запросов, основанный на стоимости (CBO, Cost-Based Optimizer), который анализирует различные планы выполнения и выбирает из них оптимальный, т.е. с минимальной стоимостью выполнения. Это обеспечивает максимальную скорость и экономию ресурсов, снижая нагрузки на процессор, память и подсистему ввода-вывода. Кроме того, CBO учитывает изменения в объёмах данных и структуре таблиц, динамически адаптируясь к меняющейся статистике, чтобы поддерживать высокую производительность. Чтобы точно прогнозировать стоимость исполнения каждого возможного варианта выполнения запросов, CBO основывает свои решения на статистике, собранной о таблицах и индексах (размер таблиц, селективность индексов, распределение данных). Кроме того, оба движка используют фреймворк конвейерного исполнения запросов, который автоматически настраивает параллелизм, чтобы в полной мере использовать вычислительную мощность многоядерных систем. Поэтому StarRocks и Trino отлично справляются со сложными многотабличными запросами.

Таким образом, помимо общих сценариев использования, StarRocks и Trino имеют схожие инструменты работы с данными и архитектурные подходы к их реализации.

В чем разница между StarRocks и Trino, что и когда выбирать

Несмотря на вышеотмеченные сходства, между StarRocks и Trino есть много отличий. Прежде всего, они написаны на разных языках программирования, что напрямую влияет на производительность. StarRocks реализован на C++, а потому использует нативный векторный движок выполнения для более эффективной утилизации рисурсов ЦП. В частности, StarRocks активно использует кэш ЦП и инструкции SIMD, чтобы выполнять больше вычислений данных за меньшее количество тактов. Trino написан на Java, поэтому ему присущи все проблемы JVM-приложений, связанные с нехваткой памяти. Подробно об этом мы писали здесь.

Система кэширования в StarRocks сложнее, чем в Trino. StarRocks реализует кэширование данных с поддержкой кластера на каждом узле. Этот кэш использует комбинацию памяти и диска, которая может использоваться для промежуточных и окончательных результатов запроса. Поэтому StarRocks может кэшировать метаданные Apache Iceberg на локальных дисках для повышения производительности запросов. StarRocks также поддерживает разогрев кэша, установку приоритетов и черных списков кэша. Это значительно повышает производительность запросов в сценариях с высоким параллелизмом. Кэш запросов в StarRocks запоминает промежуточные результаты каждого вычислительного узла в памяти для последующего повторного использования. Это отличается от обычного кэша результатов, который эффективен только для идентичных запросов. В Trino кэширование работает только на уровне памяти и файловой системы. Это требует большего количества ресурсов.

Материализованные представления в StarRocks выбираются и перезаписываются автоматически с учетом режима работы с ресурсами (shared-nothing или shared-data). Для повышения локальности данных можно записывать материализованные представления на локальный диск вместо удаленного хранилища. Этого нет в Trino: дата-инженеру нужно переписывать запрос вручную и самостоятельно заботиться об обновлении материализованного представления при изменении данных. Кроме того, Trino не записывает материализованные представления на локальный диск.

Будучи изначально разработанным как SQL-движок для аналитики данных во внешних системах, Trino поддерживает гораздо больше подключений к источникам данных. Кроме того, плагинная архитектура этого фреймворка позволяет расширить его собственными коннекторами и функциональными возможностями, что мы разбирали здесь и здесь.

Таким образом, Trino отлично подходит для ситуативных (ad-hoc) аналитических SQL-запросов одновременно к разным источникам данных, от стриминговых платформ типа Apache Kafka до реляционных БД и файловых/объектных хранилищ. StarRocks же может не только выполнять аналитические вычисления, но и хранить информацию, т.е. выступать в качестве основы для построения корпоративного хранилища или озера данных.

Узнайте, как построить эффективную архитектуру данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://trino.io/docs
  2. https://docs.starrocks.io/docs/introduction/StarRocks_intro/
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.