Всем привет! Меня зовут Дмитрий Рейман, я техлид аналитической платформы Авито. Уже третий год мы занимаемся миграцией с Vertica на Trino. Изначально казалось, что это будет просто: перенесём запросы, перепишем коннекторы, чуть подправим пайплайны. Но за два с лишним года миграция перестала быть просто миграцией: проект разросся в инженерную одиссею, и вокруг Trino мы начали строить целую экосистему. 

В предыдущей статье – «Миграция DWH Авито в Lakehouse. Начало» – мы подробно разобрали предпосылки этой миграции, рассказали, почему в какой-то момент классическая модель DWH перестала нас устраивать, как мы выбирали новый движок и с чего начинали переход к Lakehouse-архитектуре.

В этой статье я хочу сосредоточиться на следующем шаге: узких местах, с которыми мы столкнулись на практике, и на том, какую инфраструктуру и какие сервисы нам пришлось построить вокруг Trino, чтобы новая архитектура действительно заработала как единая и устойчиво масштабируемая система.

Trino в Авито: масштаб и сценарии

Сейчас Trino – один из ключевых элементов аналитической платформы Авито.

Ежедневно им пользуются около 500 человек: аналитики, разработчики, ML-инженеры и специалисты внутренних платформ.

Мы обрабатываем порядка 1.5 ПБ данных в сутки, включая:

  • ad-hoc аналитику;

  • витрины Datamart;

  • BI и отчётность;

  • Feature Store;

  • и постепенно мигрирующий ETL.

Чтобы выдерживать такую нагрузку, у нас работает более 20 кластеров Trino, развёрнутых на 200+ физических серверах.

Система исполняет свыше миллиона запросов в сутки, достигая пиков около 200 запросов в секунду.

Через Ceph, наш основной сторадж, проходит до 25 ГБ/с чтения под типичной рабочей нагрузкой.

Всего в хранилище более 50 000 таблиц и 20 миллионов партиций в разных слоях – от основного DWH до метрик и Feature Store. В сумме это около 1 ПБ данных.

Помимо классического DWH мы также предоставляем Lakehouse как сервис, и Trino является его вычислительным ядром, но далеко не единственным компонентом. Вокруг него работает большой ландшафт сервисов: каталог, сторадж, кэши, балансировщики и прокси, коннекторы, контрол-плейн и инструменты управления жизненным циклом данных.

На первый взгляд может показаться, что Trino – это «готовый движок», который просто достаёшь из коробки. Но в реальности это ядро, вокруг которого приходится строить обширную экосистему.

Bottleneck #1: Хранилище

Данные мы храним в Ceph (S3-совместимом объектном хранилище) — с ним работают и Vertica, и Trino. Мы сознательно держим одинаковые схемы и наборы таблиц в обеих системах, чтобы пользователи не переписывали пайплайны и могли запускать одни и те же запросы в любой из них.

В какой-то момент мы обнаружили, что Ceph перестаёт выдерживать нагрузку. На графике минуты деградации: самый большой пик доходил до 500 минут, следующий — до 200. Ceph отвечал очень медленно, и вместе с ним проседали любые Table Scan-операции: регламентные расчёты тормозили, аналитика вставала, запросы выполнялись значительно дольше — недовольны были все.

Кликни здесь и узнаешь

Как мы до этого дошли?

Начнём с базового факта: любая массово-параллельная система (MPP) стремится выполнять запросы как можно быстрее и как можно более параллельно. И Trino, и Vertica с этим отлично справляются. Но со временем мы увидели, что пропускная способность чтения стабильно упирается в ~10 ГБ/с.

На первый взгляд, 10 ГБ/с – не такая уж большая цифра для крупного кластера объектного хранилища. Наш Ceph работает на 500+ HDD-дисках: это дешёвое, но масштабное хранилище, рассчитанное на высокий параллелизм.

Однако в какой-то момент стало ясно, что мы упёрлись в потолок: даже если иногда замеры показывали 12 ГБ/с, было очевидно, что это далеко не предел. Теоретическая пропускная способность нашего Ceph доходила до 40 ГБ/с, а мы использовали лишь небольшую часть этого потенциала.

Мы начали управлять нагрузкой:

  • сначала в Vertica через rate limit в AWS SDK,

  • потом поставили HAProxy между каждой воркер-нодой и Ceph (и в Vertica, и в Trino) и настроили bw_limit, сделав разные ограничения для людей и регламентных процессов,

  • в Trino пытались управлять throughput через настройку hive.max-splits-per-second.

Эти меры помогли сгладить пики: один запрос больше не мог забить весь канал. Но сам потолок остался прежним: примерно 10 ГБ/с. Расширение Ceph также ничего не изменило.

Кроме того, мы заметили важный эффект: активная запись приводила к деградации чтения примерно в соотношении 1 ГБ/с записи – минус 3 ГБ/с чтения. То есть любая интенсивная выгрузка данных напрямую «съедала» пропускную способность для аналитики.

Отклик спасло то, что мы поменяли конфигурацию Ceph: вынесли хранение метаданных с HDD на NVMe. Это сразу подняло throughput с 10 до 40 ГБ/с. В нагрузочном тесте мы увидели потолок в 40 ГБ/с, а в реальной эксплуатации — до 25 ГБ/с, то есть комфортный запас примерно в 15 ГБ/с от пика. Мы расслабились: средняя нагрузка держалась на уровне 20 ГБ/с, запас есть – кажется, всё хорошо.

Мы выдохнули, но ненадолго. Когда на систему одновременно давили ETL и пользовательские запросы, история повторилась. Критичной оказалась именно нагрузка от ETL: мы начали переносить её в Trino, но только в июне наконец нашли root cause того, что происходило.

Тут нас выручила новая возможность Trino – локальные кэши, которые появились в версии 439. Мы включили их на нескольких кластерах, и в ряде сценариев нагрузка на Ceph упала в разы. Особенно это было заметно на повторяющихся пользовательских запросах и отчётных витринах: существенная часть данных стала читаться напрямую с локальных дисков воркеров, а не с Ceph.

S3 из коробки не работает под реальной нагрузкой. Просто положить данные в Ceph недостаточно. Нужно учиться читать.

Первый вывод, который мы сделали: Ceph «из коробки» не работает под реальной нагрузкой. Просто положить данные в storage недостаточно – нужно уметь правильно читать из этого хранилища так, чтобы оно отвечало с приемлемой скоростью под реальными, постоянно меняющимися нагрузками.

Bottleneck #2: Каталог

Основной формат хранения у нас – Hive, хотя мы активно используем и Iceberg. Так сложилось не случайно: на момент начала миграции у нас уже была настроена репликация из Vertica в Hive, этот путь был самым простым и надёжным. Iceberg тогда ещё не обладал нужным для нас функционалом, поэтому мы сознательно не спешили с переходом. 

В качестве каталога мы используем Hive Metastore: там расположены Hive-таблицы, а также через него умеет работать Iceberg – это сделало выбор каталога логичным и минимизировало издержки.

Однако, у каждого формата есть свой ряд проблем. 

Hive – надёжный «старичок», проверенный временем, но он делает много лишней работы и болезненно реагирует на миллионы партиций. Мы начали использовать его ещё до появления Trino и даже до появления самого Metastore: данные выгружали из Vertica в Hive-формате, а в Vertica создавали внешние таблицы. Vertica выступала каталогом, Ceph хранилищем, и всё работало из коробки.

Проблемы начались не столько из-за формата, сколько из-за экосистемы вокруг него.

Да, Hive устарел, у него нет полноценного ACID, но для аналитики это не критично при правильном моделировании: витрины пересчитываются раз в сутки или несколько раз в день, и если кто-то в момент перезаписи поймает ошибку чтения – это терпимо.

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

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

Жми сюда!

С Hive Metastore (HMS) отдельная история: для нас это откровенный legacy. Он делает массу лишней работы. Например, постоянно листит файлы в Ceph, хотя это уже сделал Trino и просто просит у каталога метаданные. Получается, если Ceph работает медленно, начинают тормозить листинги, из-за чего в Trino замедляется и планирование, и выполнение запросов.

Metastore чувствителен к ресурсам: стоит ограничить CPU у базы, где хранятся метаданные, и он начинает подвисать.

Однажды мы попытались хранить в HMS партиции для наших гиперкубов: это несколько миллионов записей. Мы упёрлись в классическую O+1 проблему: Metastore начинал поштучно обрабатывать каждую партицию, и планирование запросов на таких таблицах выходило за 10 минут.

Ещё одна проблема: загрузка данных извне. Чтобы положить данные, нужно сначала записать их в Ceph, а затем зарегистрировать таблицу или партицию. Делать INSERT через Trino категорически не стоит. Большинство клиентов генерирует вставки по строкам, из-за чего каждая запись уходит в отдельный файл, что приводит к лавине мелких файлов и резкой деградации. Правильный путь – сначала загрузить файл в storage, а затем зарегистрировать метаданные. Но storage у нас чувствителен к нагрузке, и появление неконтролируемых потоков записи нам ни к чему.

В четвёртой версии Hive Metastore многие вещи поправили, но мы не спешим мигрировать, так как своими силами обошли узкие места и сфокусировались на других задачах.

Iceberg, наоборот, решает важные для нас задачи: обеспечивает атомарность операций и отлично работает с гиперкубами. После перехода на Iceberg-таблицы мы перестали хранить миллионы партиций в HMS. За счет этого мы выиграли время и ресурсы на операциях планирования и удаления. 

Но и здесь есть свои ограничения. Стандартный Iceberg-коннектор в Trino пока уступает Hive-коннектору по производительности. Мы понимаем в какую сторону его можно развивать, но сейчас у нас нет ресурсов довести его до уровня Hive, стабильно работающего под нашей нагрузкой. Тем не менее, за время эксплуатации мы уже успели исправить несколько багов в Iceberg-коннекторе и продолжаем следить за его развитием.

У самого Iceberg есть ещё один нюанс: за таблицами нужно регулярно ухаживать. Однажды мы забыли включить обслуживание. За месяц метаданные разрослись почти до трёх терабайт – это тот случай, когда не сразу понимаешь, смеяться или плакать.

Экосистема вокруг Iceberg, конечно, взрослеет: когда мы начинали миграцию, не было ни одной стабильной реализации каталога. Сейчас вариантов больше, качество улучшилось, но для полного перехода нам всё ещё не хватает зрелости инструментов.

Универсального решения нет. Придется чем-то жертвовать и строить вокруг.

Мы остановились на компромиссе. Hive остаётся основой нашего большого DWH, а Iceberg используем точечно: в небольших платформах, где критична атомарность и требуются специфические сценарии обновления.

Bottleneck #3: ETL

А теперь самая спорная часть миграции: ETL в Trino.

В сообществе часто можно услышать мнение, что ETL через Trino – это плохая практика. Обычно рекомендуют Spark, а Trino только для ad-hoc. 

Для нас путь был практически предопределён. В Vertica мы подключались к внешним источникам, читали данные и выполняли трансформации прямо в базе – весь наш ETL изначально жил внутри SQL-движка. Поэтому при миграции для нас естественным и понятным было повторить тот же подход в Trino.

Мы проверили как Trino справляется с нагрузкой, и оказалось, что по чтению он работает не хуже Vertica. Кроме того, у нас уже были примеры крупных компаний, которые делают ETL через Trino, что дополнительно усилило уверенность в выборе. Сейчас мы используем Trino и для загрузки данных из внешних источников, и для раскладки данных в Anchor Model / 6НФ (DDS). Это те структуры, которые применяются аналитиками в ad-hoc и регулярных расчётах. Подробнее о том, что это такое и как мы это используем, можно прочитать в статье 2017 года.

Основная проблема – работа с большими DDS-таблицами. Без индексов и расширенной статистики Trino неизбежно читает много лишнего. А на наших объёмах часто ещё и не срабатывает pushdown динамического фильтра: из-за ограничения на его размер фильтр из join-а хоть и применяется, но уже после того, как данные полностью прочитаны с диска и разжаты. В итоге движок делает full scan – а для таблиц вроде item или cookie это +1-2 ТБ данных. Несколько параллельных запросов такого типа легко перегружают Ceph-кластер и заметно ухудшают отклик.

Частично ситуацию улучшили локальные кэши. Поскольку DDS – append-only, значительную часть данных удаётся держать на локальных дисках рабочих узлов, что существенно снижает нагрузку на Ceph.

Но помимо сложностей, сам Trino дал нам и важное преимущество – возможность спрятать 6НФ за удобным интерфейсом широких таблиц. Мы разработали плагин, который выполняет локальный N-way merge join и не требует загружать все данные в память. Нагрузка на Trino заметно снизилась, а пользователи получили простой и привычный SQL-интерфейс.

Еще один отдельный блок: загрузка данных из внешних источников. В Vertica мы активно использовали UDx и федеративные запросы, поэтому в Trino логично было реализовать похожий подход. Постепенно мы развили целый набор коннекторов: можем описывать API-эндпоинты как таблицы и работать с ними как с реляционными; читать данные из S3, Nextcloud и SFTP; обрабатывать файлы в разных форматах, включая Excel; подключать базы – Mongo, Kafka и другие.

Чтобы представлять внешние источники в виде таблиц, нам понадобился каталог. В Vertica он был встроенным, а для Trino пришлось делать собственный. Iceberg-каталог для этой задачи оказался избыточным, а Hive Metastore мы сознательно не стали использовать из-за его legacy-природы и ограничений. В итоге мы разработали свой каталог для хранения метаданных. Он разблокировал миграцию ETL и открыл широкие возможности для интеграций. Более того, теперь разные команды внутри компании могут создавать собственные коннекторы к внешним источникам и регистрировать их в этом каталоге.

Таким образом, ETL в Trino возможен. С локальными кэшами, доработкой динамических фильтров и собственным DDS-движком он стал эффективным инструментом для наших задач.

Bottleneck #4: Репликация и миграция

Хочется поделиться деталями самой миграции: как она идёт и где мы находимся сейчас. Напомню важный момент архитектуры: мы поддерживаем консистентность между Vertica и Trino, поэтому данные должны постоянно и надёжно реплицироваться в Ceph.

Одним из самых неприятных сюрпризов стали резкие провалы пропускной способности на чтение, вызванные активной записью при выгрузке данных из Vertica в Ceph. Логично: HDD-диски постоянно забиты записью, и ресурсов на чтение просто не остаётся. Но в таких масштабах мы к этому не были готовы.

Ещё одна проблема – сама Vertica. Полная выгрузка таблиц съедает огромное количество её ресурсов. Казалось бы, самый простой способ поддерживать консистентность – раз в день выгружать таблицу целиком. Но у нас уже больше петабайта данных, и ежедневно такие объёмы не выдержит ни Vertica, ни Ceph.

Поэтому мы начали оптимизировать объём выгрузки.

Для витрин всё относительно просто: они регулярно пересчитываются и партиционированы, поэтому мы просто перевыгружаем новые и изменённые партиции.

Но с DDS всё сложнее: там нет партиционирования. Некоторые хабы – например, cookie или item – занимают несколько терабайт. Полная выгрузка таких таблиц каждый день – это часы работы и прямой удар по SLA зависимых пайплайнов.

Выходом стало инкрементальное обновление. Мы научились выгружать из Vertica только новые данные, опираясь на epoch. Это сильно сократило объём выгрузки, но принесло новые сложности.

Тут еще больше контента

Инкрементальная выгрузка привела к появлению множества мелких файлов, что заметно ухудшает эффективность чтения. Пришлось добавить компакшн. Но компакшн тоже требует ресурсов, а пропускная способность Ceph ограничена. Получилось, что мы разгрузили одну часть системы и тут же создали нагрузку в другой. И вот тут мы поняли, что выгрузка ≠ просто «сохранить данные». Это целая отдельная система.

В итоге решение, которое казалось простой инженерной задачей, превратилось в длинную цепочку доработок и архитектурных изменений. Пришлось менять процессы, инструменты, форматы данных, оптимизировать весь контур задержек и очень внимательно следить за балансом нагрузки между Vertica, Trino и Ceph.

Тем не менее, несмотря на все сложности, за последние два года мы продвинулись очень далеко. Напомню: хранилище в Авито существует уже больше 10 лет, и «просто взять и мигрировать всё сразу» невозможно. Это даже звучит смешно в нашем масштабе.

На текущий момент мы пришли к следующим результатам:

  • примерно половина витрин (около 2500) уже считается в Trino;

  • более 70% аудитории аналитической платформы ежедневно работают именно в Trino;

  • скорость расчётов сопоставима с Vertica, и на этом направлении у нас нет проблем.

Это всё ещё путь, и он требует времени, но фундамент уже заложен, а миграция идёт уверенно и предсказуемо.

Итоги

 

Главный вывод: Trino – это мощное ядро, но его ценность раскрывается только в связке с грамотной инфраструктурой вокруг. Хранилище, каталоги, ETL, коннекторы – всё это требует внимания и доработок.

Мы ни разу не пожалели, что пошли на миграцию, но устали от её масштабов. И если вы думаете, что заменить движок просто, то будьте готовы, что в процессе вы построите целую экосистему, о которой изначально даже не думали.

TL;DR Жалеем ли мы, что выбрали Trino? Нет. Устали ли мы от миграции? Да, очень устали.

А вы пробовали строить аналитику на Trino? С какими узкими местами сталкивались и как их решали? Расскажите об этом в комментариях!

В следующей статье серии мы подробнее поговорим о сторидже и о том, как объектное хранилище из фонового компонента архитектуры превратилось в один из ключевых факторов, определяющих ограничения, проблемы и инженерные решения Lakehouse-платформы.

Комментарии (18)


  1. VitaminND
    27.12.2025 09:48

    Слежу за вашей эпопеей, видео и статьи очень интересные. Есть чему поучиться.

    Спасибо, что делитесь знаниями!


    1. ddreyman Автор
      27.12.2025 09:48

      Приятно слышать, что кто-то находит наш опыт полезным)


  1. turbotankist
    27.12.2025 09:48

    А что по формату данных?

    Дельта Лейк, айсберг или просто паркеты?


    1. ddreyman Автор
      27.12.2025 09:48

      Во второй главе статьи про это как раз написано "Основной формат хранения у нас – Hive, хотя мы активно используем и Iceberg". Формат файлов мы используем ORC (почему – в предыдущей статье https://habr.com/ru/companies/avito/articles/979836/)


  1. avramenkobogdan
    27.12.2025 09:48

    Добрый день, заинтересовало 2 момента:

    1. Почему именно Trino? Не вижу (Spark вижу, даже StarRocks вижу) в ваших материалАХ обзора Impala (вычислительная часть которой на быстрых сях в отличии от более медленной trino-джавы)?

    2. Что за гиперкубы? У вас не описано, в интернете не гуглится (не вижу)


    1. ddreyman Автор
      27.12.2025 09:48

      1. Производительность движка в первую очередь определяется не языком программирования, на котором он написан. Его архитектура и реализованные оптимизации играют куда более важную роль.
        "Медленная джава" – это всего лишь предубеждение. Мы видим своими глазами, как трино работает не хуже вертики, а где-то и превосходит ее, хотя она написана на "быстрых сях".
        Выбирая движок, мы в первую очередь смотрели современные, активно развивающиеся и активно применяемые в мировых биг техах решения. Мы искали решение, которое сможем развивать своими силами – на наших масштабах работающих "коробок" не существует.
        Trino/Presto используют и активно развивают все топовые биг техи мира. Он показал себя отлично на тестах. Он отлично показывает себя в продакшне на наших масштабах. Все изначально обозначенные проблемы уже решены.

      2. речь про платформу аб-тестов и метрик – https://trisigma.io/
        она расчитывает классические olap-кубы с десятками разрезов – 30+ млрд метрик в день. подробнее можно посмотреть тут: https://youtu.be/wsjVP2nNpsM?si=dGpwORzO_ImwrmW_


      1. avramenkobogdan
        27.12.2025 09:48

        Вот примеры статей с бенчмарками: trino (имхо ожидаемо) самый медленный из ряда вариантов включающих StarRocks, Impala, Spark:

        (то что трино быстрее вертики - это скорее камень в сторону вертики, чем бонус в сторону трино)

        Ну, минус StarRocks мне понятен - современный подход - это S3 + Engine, а старрокс это СУБД которой года 4 (слишком молодая) да еще и основанный на устаревшем подходе локального хранения, от которого уже и ClickHouse открестился (см ClickHouse Cloud - причем в открытый доступ SharedMergeTree эти «добрые» люди не выкатили)

        Но я также спросил у вас, почему вы (например в вашей прошлой статье: https://habr.com/ru/companies/avito/articles/979836/) вообще не анализировали Impala? Без Impala бенчмарк совсем непоказательный выходит (имхо)


        1. ddreyman Автор
          27.12.2025 09:48

          любые синтетические бенчмарки (tpc-ds и тп) имеют мало общего с реальностью. они примерно как тест на IQ – показывают как хорошо движок проходит тест =)
          мы тестировали запросы типичные в нашем окружении с нашей спецификой. в статье даже есть дисклеймер: "Тестирование проводилось в 2022 году и отражает состояние технологий и экосистем на тот момент, а также наш конкретный юзкейс. Результаты не являются универсальной рекомендацией и, разумеется, не являются публичной офертой."

          что касается Impala, он не подходил под наши критерии, о которых я написал выше – "современные, активно развивающиеся и активно применяемые в мировых биг техах решения", "которое сможем развивать своими силами"


          1. avramenkobogdan
            27.12.2025 09:48

            Про бенчмарки я согласен, что это не панацея, спору нет, я поэтому сейчас «прикопался» к вам)

            Вот очень интересно, чем именно не подошла Impala:

            • Не современная?

            • Не активно применяется в мировых бигтехах?

            • Не можете развивать своими силами? (Почему?)

            Может вы просто не подумали об Impala на тот момент - это вполне понятная история. ClickHouse в свое время вот не подумали об HDFS/S3 (https://habr.com/ru/articles/509540/) и собрали свой велосипед-локальное-хранилище с ReplicatedMergeTree (в последствии уперлись в потолок и перешли на S3: https://clickhouse.com/blog/clickhouse-cloud-boosts-performance-with-sharedmergetree-and-lightweight-updates)

            Мы просто сейчас сами выбираем движок, поэтому так докапываюсь. Минусы Java - это не предубеждения, у нее есть масса фундаментальной проблематики которая мешает написанию качественного низкоуровневого движка/СУБД: проблемы интеграции assembler, кривая интеграция SIMD, перегруз ООП-стактрейсом, да и вообще от этого языка не просто так отпочковались Scala/Kotlin, и прочая проблематика связанная с JVM/Heap-memory и пр.

            Я вот не так давно анализировал in-memory-databases и на их примерах вижу, что валовая часть хороших продуктов написана на C/C++ и еще Rust набирает популярность сейчас. Садиться на движок который фундаментально сделан на кривом ЯП - ну такое себе.

            Если у Impala есть критические минусы над Trino - я бы очень хотел о них знать.


            1. ddreyman Автор
              27.12.2025 09:48

              Минусы Java - это не предубеждения, у нее есть масса фундаментальной проблематики которая мешает написанию качественного низкоуровневого движка/СУБД

              Вы все правильно говорите. Лично я с такими же мыслями скептически относился к Trino, когда мы выбирали движок. Однако на наших prod like тестах Trino показал себя не хуже Vertica еще 3 года назад. При миграции платформы аб наша UDF в Трино на Java работала не хуже UDF в Vertica на C++. А буквально сейчас p90 отклик Trino в адхок сценариях 1-к-1, как в Vertica на локальных данных – 38 сек.

              Поэтому я утверждаю, что несмотря на фундаментальные ограничения Java движок может себя показать не хуже нативных движков на масштабах Авито. Поверьте, я удивлен не меньше вашего =)

              Если у Impala есть критические минусы над Trino - я бы очень хотел о них знать.

              Каждый выбирает критерии для себя сам. Для нас критичным было то, что Impala создавалась компанией Cloudera для мира Hadoop. Мы скептически смотрели на Hadoop еще в 2013 году, когда Авито только начинал строить DWH. Также скептически мы смотрим на все, что связано с Hadoop и сегодня.

              Для нас важно, как движок развивается, как отвечает современным вызовам, кто его использует, кто развивает. Мир больших данных изменился за последние 10 лет до неузнаваемости и, кажется, не собирает останавливаться.

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

              Мой поинт в том, что оценивать работу движка будут не по сухим цифрам из бенчмарков, а по тому как он работает в продакшн. Причем, работа в проде – это далеко не только скорость выполнения запросов. Во многом это про сложность поддержки и развития решения.

              Конечный пользователь просто не заметит разницы в том, выполнился запрос за 30 сек или за 40 сек. А вот отсутствие привычной для него фичи он заметит моментально.

              Наш опыт показывает, что все проблемы, которые возникли у нас при работе с Трино мы смогли решить самостоятельно – подобрав настройки, написав плагин или пропатчив сам Трино. Мы уже достаточно хорошо ориентируемся в кодовой базе Трино, код написан очень качественно, с ним приятно работать, его легко дебажить, он расширяемый.

              Наконец, Трино дает такое количество данных для monitoring, observability и debug, о каком мы не могли и мечтать. После Vertica ощущения невероятные)



          1. EvgenyVilkov
            27.12.2025 09:48

            Какая у вас тут интересная дискуссия получается, коллеги.

            Как персона, имеющая прямое отношение у указанным выше ссылкам с полной ответственностью заявляю что смена методики на любую другую не поменяет расклад сил в тестировании. Проверялось неоднократно и на пром данных, и на синтетических тестах и на расчетах ELT и на чем угодно.

            Однако, ознакомившись со следующей статье вашего цикла, у меня есть ощущение, что на чем бы вы не обращались к данным, вы упираетесь в инфраструктуру S3. Поэтому, разницы особую можно и не заметить между движками.

            Ваш выбор - это ваш выбор. Вы выбирали под своим критерии и значит вам это решение большо подошло. Хоть и переплатили за compute мощности, но зато увереннее себя чувствуете тк можете что то развивать своими силами. Это нормально же.

            По поводу Spark. Без него вам нормально пока не выжить, если хотите перейти окончательно на iceberg как на целевой формат. Только Spark может предложить полное реальное работающее обслуживание iceberg формата.


            1. ddreyman Автор
              27.12.2025 09:48

              Только Spark может предложить полное реальное работающее обслуживание iceberg формата.

              Спасибо за наводку) Пока проблем без Spark не испытываем – все существующие задачи отлично решались через Trino. Про внедрение Iceberg обязательно расскажем в следующих статьях


        1. EvgenyVilkov
          27.12.2025 09:48

          Там еще и третий тест добавили в Click Bench и тч со сравнением ClickHouse, работающим над S3. https://habr.com/ru/companies/datasapience/articles/978430/

          В части StarRocks вы правы только от части - он умеет работать над S3, но не все операции с открытыми форматами данных на нем доступны, о чем умалчивают или не понимают некоторые российские вендоры.


          1. avramenkobogdan
            27.12.2025 09:48

            Да понятно что сейчас почти все (позиционирующие себя как) современные СУБД имеют какие-то интеграции с S3... и это утверждение (про частичную работу StarRocks с S3) упирается в другой упомянутый мною минус: молодость продукта StarRocks. Да и его (StarRocks) развивают в первую очередь какие-то непонятные китайцы (поправите?), а не Амазоны/Гуглы/etc...

            Да и в принципе не понятно, если есть S3, на который и движки ориентируются (Impala/Trino/Spark/подобное) и кликхаусы переходят - зачем жечь время+деньги на проработку локального хранилища? Такое распыление ресурсов - явно бонусом к продукту не идет.

            Я вот смотрю на тот же кликхаус, он там с 2009 разрабатывается (почти 2026 на дворе, 17 лет!), а столько всего в нем еще не сделано...

            • Никакого процедурного PL/SQL

            • на долгом запросе после потери связи с хостом-источников - продолжает выполнять долгий запрос (ну по ошибке в их http/play интерфейсе отправил огромный запрос - если вручную не убить через KILL - запрос будет работать почти до последнего, оборвется только на переходе со стадии подзапроса SELECT на стадию INSERT)

            • Оптимизатор запросов на уровне детского сада

            • И много чего еще там нет...

            • И в качестве «бонуса» - не выкатывают в open-source SharedMergeTree

            Я вот уверен что у StarRocks подобных болезней молодой СУБД тоже будет хоть отбавляй. Еще в качестве не блокирующей, но занозы: разработчики-китайцы... Захочешь в код глянуть - привет иероглифы, будут 146%...
            Движок типа Impala хотя бы c 2013 года развивается, и он не палит ресурсы на развитие своего хранилища-велосипеда.
            Лично собеседовался пару месяцев назад на проект, где собирались использовать именно StarRocks... Я бы лично не решился сейчас на нем пилить продуктивное хранилище данных.

            P.S.: Спасибо за ссылку!


            1. EvgenyVilkov
              27.12.2025 09:48

              В 2017 году группа китайцев "форкнула" Impala и ушла делать Doris. Мотивация была такой - ходим update delete timeseries? но не хотим идти в Kudu, а хотим в Mesa. Сами разработчики это назвали "идеологическим наследием". В процессе "перехода" перешли на свой собственный формат хранения и оптимизатор и стали shared-nothing СУБД по сути. За эти годы сообщество придумало OTF и они стали стандартом рынка в итоге Дорис начал переобуваться в ОТF форматы и по факту стал теперь догонять Импала в части поддержки открытых форматов.

              СтарРокс форкнулся от Дорис в 2020г чтобы тоде уйти в свой формат со своим видением, но чуть раньше чем Дорис поняли что надо ориентироваться на OTF а не свои волшебные форматы.

              Очень забавно читать материалы коллег, которые на голубом глазу рассказывают про уникальные векторные вычисления в Старрокс, которые на самом деле он унаследовал от бабушки антилоппы которая их умела в 2013 году.

              СтарРокс как движок над S3 в настоящий момент в продакшине можно использовать только на чтение для bi adhoc доступа. ELT точно нет! С локальным стореджем можно жить, но не без приколов.


          1. ddreyman Автор
            27.12.2025 09:48

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

            Также не хватает продолжительного теста, когда в какой-то момент S3 может по неведомым для вас причинам отвечать сильно медленнее, чем раньше. И в таком приближенном к реальности тесте очень ярко бы себя показали локальные кэши в Трино (которые вы тоже не использовали в тесте, хотя кх с локлаьными дисками сравнивали). Предоставляют ли другие движки из коробки такую возможность? Сегодня ни одно современное облачное решение (напр. Snowflake, Yellowbrick, Clickhouse, Starburst) не обходится без агрессивного кэширования. Объектные хранилища просто не работают как локальная файловая система, сколько бы мы этого от них не хотели.


  1. iayakunin
    27.12.2025 09:48

    Как аналитик из Авито вставлю еще одну интересную особенность которая была вскользь упомянута в статье. После перехода на Trino аналитикам гораздо проще стало получать доступ к архивным данным. Раньше в Vertica у витрин имелась глубина в зависимости от ее размера, и чтобы получить доступ в архиву приходилось писать запросы к архивной схеме которые очень долго работали. После переезда на Trino и актуальные данные и архивные стали одними и теми же файлами на Ceph, это позволило нам удобно рассчитывать признаки для МЛ-моделей, например. Если получаем от партнера выгрузку за 2023 год, то больше не страдаем, а просто запускаем регламентный расчет признаков на Trino ничего не меняя в запросах и через небольшое время получаем свои признаки на старые даты чтобы делать аналитику)


  1. Mike-M
    27.12.2025 09:48

    Уже третий год мы занимаемся миграцией с Vertica на Trino.

    Чувствуется. Личный опыт:

    • 2024 год — около 10 просмотров объявлений в неделю, продал 7 товаров.

    • 2025 год — не более 1 просмотра объявления в неделю, продал 1 товар.

    Количество объявлений, категории, цены и т.п. — всё примерно одинаково.

    ID 86239492. @ddreyman, вы уж там подкрутите что поломали при миграции.