Базы данных и аналитика на DataFusion
В предыдущем уроке мы рассмотрели FDAP-стек и позицию DataFusion как «LLVM аналитики». Теперь — конкретные проекты, которые строят специализированные системы поверх DataFusion.
Уже разобранные проекты
Четыре крупных проекта мы подробно разобрали в уроке по паттернам расширяемости:
В этом уроке мы рассмотрим проекты, которые ещё не были охвачены в курсе: стриминг, observability, семантические слои и новые time-series системы.
Arroyo: стриминг на DataFusion
Arroyo — распределённый stream processing engine, который перешёл на DataFusion в качестве query engine.
Как 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
Arroyo демонстрирует важный паттерн: DataFusion полезен не только для batch-аналитики. Стриминговые системы могут использовать планировщик и оптимизатор DataFusion, добавляя streaming-специфичные операторы через расширяемый API.
OpenObserve: observability на DataFusion
OpenObserve — платформа для логов, метрик и трейсов, позиционирующая себя как альтернатива Elasticsearch, Splunk и Datadog. DataFusion — ядро аналитического движка.
Почему DataFusion для observability
Observability-данные — это по сути аналитика:
- Структура: логи, метрики и трейсы — колоночные данные с timestamp
- Запросы: агрегации по времени, фильтрация по полям, top-N — классические аналитические паттерны
- Объём: петабайты логов, триллионы записей — нужен эффективный columnar engine
DataFusion + Parquet дают OpenObserve производительность columnar-аналитики на observability-данных, без необходимости писать собственный query engine.
Точки расширения в OpenObserve
| Компонент DataFusion | Использование в OpenObserve |
|---|---|
TableProvider | Доступ к Parquet-файлам на S3 и локальных дисках |
ScalarUDF | Full-text search функции (match_all, str_match) |
OptimizerRule | Time-range pruning (пропуск файлов вне временного окна) |
PhysicalOptimizerRule | Partition pruning по метаданным Parquet |
Cube и Tesseract: семантический слой
Cube — платформа семантического слоя (semantic layer) с 18 000+ звёзд на GitHub. Tesseract — новый query engine Cube, построенный на DataFusion.
Что такое семантический слой
Семантический слой — абстракция между бизнес-метриками и физическими таблицами:
# Пример 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 локально
Cube/Tesseract — пример использования DataFusion не как замены СУБД, а как промежуточного вычислительного слоя. DataFusion оптимизирует и кеширует то, что не нужно каждый раз запрашивать из тяжёлого хранилища.
HoraeDB: распределённая time-series СУБД
HoraeDB (ранее CeresDB) — распределённая time-series СУБД, использующая DataFusion для SQL-выполнения.
Сходство и различие с GreptimeDB
HoraeDB и GreptimeDB (M05 урок 6) — оба time-series СУБД на DataFusion, но с разными акцентами:
Оба проекта подтверждают паттерн: DataFusion — универсальный SQL-движок, поверх которого можно построить time-series СУБД с произвольной storage-моделью.
HoraeDB находится на более ранней стадии зрелости, чем GreptimeDB и InfluxDB IOx. При выборе time-series решения на DataFusion оценивайте: активность коммьюнити, частоту релизов, production-деплоименты, документацию.
Как проекты расширяют DataFusion
Все рассмотренные проекты следуют одной и той же архитектурной модели — используют trait-based API DataFusion для специализации:
Этот паттерн — прямое следствие архитектуры 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)