Learning Platform
Глоссарий Troubleshooting
Урок 10.02 · 16 мин
Средний
ArroyoOpenObserveCubeTesseractHoraeDBecosystemstreamingobservabilitysemantic layer

Базы данных и аналитика на DataFusion

В предыдущем уроке мы рассмотрели FDAP-стек и позицию DataFusion как «LLVM аналитики». Теперь — конкретные проекты, которые строят специализированные системы поверх DataFusion.

Уже разобранные проекты

Четыре крупных проекта мы подробно разобрали в уроке по паттернам расширяемости:

Проекты, разобранные в M05
InfluxDB IOxTime-series СУБД, основа InfluxDB 3.0 — DataFusion как встроенная библиотека для SQL-запросов
GreptimeDBМультимодальная СУБД — два движка: DataFusion для SQL и отдельный для PromQL
GlareDBФедеративная SQL СУБД — запросы к 30+ источникам данных через единый интерфейс
Spice AIФедеративный движок с кастомными TableProvider и pushdown оптимизацией к источникам

В этом уроке мы рассмотрим проекты, которые ещё не были охвачены в курсе: стриминг, observability, семантические слои и новые time-series системы.

Arroyo: стриминг на DataFusion

Arroyo — распределённый stream processing engine, который перешёл на DataFusion в качестве query engine.

Arroyo: архитектура
Arroyo ControllerКоординирующий узел — управляет checkpoint-ами, восстановлением и распределением потоковых задач
Streaming plan
Worker 1Рабочий узел — DataFusion SessionContext выполняет стриминговые операторы
Worker 2Рабочий узел — горизонтальное масштабирование через параллельные SessionContext
Worker NКаждый воркер обрабатывает свою партицию потока данных
Arrow RecordBatch
KafkaЧтение потоков из Apache Kafka
KinesisЧтение потоков из Amazon Kinesis
WebSocketЧтение потоков через WebSocket-соединения

Как Arroyo использует DataFusion

Arroyo не просто «подключил» DataFusion — команда провела глубокую интеграцию:

  • SQL-парсер и планировщик: Arroyo использует DataFusion для парсинга SQL и построения логического плана. Стриминговые расширения (watermarks, windows, session semantics) добавлены через кастомные LogicalPlan узлы
  • Оптимизатор: правила оптимизации DataFusion применяются к стриминговым планам — predicate pushdown, projection pushdown работают «из коробки»
  • Кастомные операторы: window-агрегации, session windows, watermark tracking реализованы как кастомные ExecutionPlan

Результат миграции на DataFusion

До DataFusion Arroyo использовал собственный query engine. После миграции:

  • 3x рост throughput за счёт оптимизаций Arrow и DataFusion
  • SQL-совместимость «из коробки» — вместо собственного парсера
  • Возможность переиспользовать UDF-экосистему DataFusion
NOTE

Arroyo демонстрирует важный паттерн: DataFusion полезен не только для batch-аналитики. Стриминговые системы могут использовать планировщик и оптимизатор DataFusion, добавляя streaming-специфичные операторы через расширяемый API.

OpenObserve: observability на DataFusion

OpenObserve — платформа для логов, метрик и трейсов, позиционирующая себя как альтернатива Elasticsearch, Splunk и Datadog. DataFusion — ядро аналитического движка.

OpenObserve: роль DataFusion
ЛогиПриём логов — структурированные и неструктурированные события
МетрикиПриём метрик — числовые показатели с timestamp
ТрейсыПриём трейсов — распределённые цепочки вызовов
Ingestion
Columnar Storage (Parquet)Observability-данные хранятся в колоночном Parquet — эффективное сжатие и pruning по времени
Query
DataFusion Query EngineSQL-запросы поверх Parquet с full-text search через кастомные UDF и time-range pruning

Почему DataFusion для observability

Observability-данные — это по сути аналитика:

  • Структура: логи, метрики и трейсы — колоночные данные с timestamp
  • Запросы: агрегации по времени, фильтрация по полям, top-N — классические аналитические паттерны
  • Объём: петабайты логов, триллионы записей — нужен эффективный columnar engine

DataFusion + Parquet дают OpenObserve производительность columnar-аналитики на observability-данных, без необходимости писать собственный query engine.

Точки расширения в OpenObserve

Компонент DataFusionИспользование в OpenObserve
TableProviderДоступ к Parquet-файлам на S3 и локальных дисках
ScalarUDFFull-text search функции (match_all, str_match)
OptimizerRuleTime-range pruning (пропуск файлов вне временного окна)
PhysicalOptimizerRulePartition pruning по метаданным Parquet

Cube и Tesseract: семантический слой

Cube — платформа семантического слоя (semantic layer) с 18 000+ звёзд на GitHub. Tesseract — новый query engine Cube, построенный на DataFusion.

Cube/Tesseract: архитектура
Cube Semantic LayerСемантический слой — переводит бизнес-метрики (measures, dimensions) в оптимальный SQL
Cube SQL → DataFusion
Tesseract (DataFusion)Новый query engine Cube — DataFusion выполняет запросы по pre-aggregated данным локально
PostgreSQLРеляционная СУБД — SQL-запросы федерируются из Cube
BigQueryGoogle BigQuery — аналитическое хранилище в облаке
SnowflakeSnowflake — облачный data warehouse
ClickHouseClickHouse — колоночная СУБД для аналитики

Что такое семантический слой

Семантический слой — абстракция между бизнес-метриками и физическими таблицами:

# Пример Cube data model
cubes:
  - name: orders
    sql: SELECT * FROM public.orders
    measures:
      - name: total_revenue
        type: sum
        sql: amount
      - name: avg_order_value
        type: avg
        sql: amount
    dimensions:
      - name: status
        type: string
        sql: status
      - name: created_at
        type: time
        sql: created_at

Бизнес-пользователь запрашивает total_revenue по status — Cube транслирует это в оптимальный SQL для конкретного хранилища.

Зачем DataFusion в семантическом слое

Tesseract использует DataFusion для:

  • Локального выполнения: запросы по кешированным/pre-aggregated данным выполняются в DataFusion без обращения к source database
  • Query planning: DataFusion оптимизирует план перед отправкой в целевую СУБД
  • Multi-source join: когда данные приходят из разных источников, DataFusion выполняет join локально
TIP

Cube/Tesseract — пример использования DataFusion не как замены СУБД, а как промежуточного вычислительного слоя. DataFusion оптимизирует и кеширует то, что не нужно каждый раз запрашивать из тяжёлого хранилища.

HoraeDB: распределённая time-series СУБД

HoraeDB (ранее CeresDB) — распределённая time-series СУБД, использующая DataFusion для SQL-выполнения.

HoraeDB: архитектура
SQL APISQL-интерфейс — стандартные аналитические запросы
InfluxQL APIInfluxQL-интерфейс — совместимость с InfluxDB-клиентами
DataFusion Query EngineSQL-планирование с time-series-специфичными оптимизациями поверх LSM-хранилища
Analytic Storage (columnar)LSM-tree с колоночной организацией — compaction, TTL и шардирование по тегам

Сходство и различие с GreptimeDB

HoraeDB и GreptimeDB (M05 урок 6) — оба time-series СУБД на DataFusion, но с разными акцентами:

HoraeDB vs GreptimeDB
HoraeDBАкцент на аналитические time-series — hash-based sharding и LSM-tree с columnar layout
GreptimeDBМультимодальность — метрики, логи и события; region-based distribution и PromQL

Оба проекта подтверждают паттерн: DataFusion — универсальный SQL-движок, поверх которого можно построить time-series СУБД с произвольной storage-моделью.

WARNING

HoraeDB находится на более ранней стадии зрелости, чем GreptimeDB и InfluxDB IOx. При выборе time-series решения на DataFusion оценивайте: активность коммьюнити, частоту релизов, production-деплоименты, документацию.

Как проекты расширяют DataFusion

Все рассмотренные проекты следуют одной и той же архитектурной модели — используют trait-based API DataFusion для специализации:

Паттерн расширения: от общего к специализированному
Паттерн расширения по категориямЕдиная модель: trait-based API DataFusion позволяет специализировать любой компонент pipeline

Этот паттерн — прямое следствие архитектуры DataFusion как библиотеки: trait-based API позволяет заменить или расширить любой компонент pipeline, не форкая кодовую базу. Подробнее о конкретных точках расширения и их реализации — в модуле по расширяемости.

Итоги

  • Arroyo: stream processing с 3x ростом throughput после миграции на DataFusion
  • OpenObserve: observability-платформа, использующая DataFusion + Parquet для аналитики логов и метрик
  • Cube/Tesseract: семантический слой (18K+ звёзд), DataFusion как промежуточный вычислительный движок
  • HoraeDB: distributed time-series СУБД на DataFusion с LSM-storage
  • Все проекты используют trait-based API DataFusion: TableProvider, UDF, OptimizerRule, ExecutionPlan
  • Ранее разобранные проекты (InfluxDB, GreptimeDB, GlareDB, Spice AI) — M05 урок 6 ns) tensibility-patterns) ns) xtensibility/06-extensibility-patterns) ns) tensibility-patterns) ns)

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Какой результат получил Arroyo после миграции своего stream processing engine на DataFusion?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4