Files
nis2/project-tasks/p21-dbsp-feldera.md
T

38 lines
7.3 KiB
Markdown
Raw Normal View History

2026-09-06 19:26:12 +03:00
# P21. DBSP/Feldera: инкрементальное выполнение запросов
2026-09-07 21:46:04 +03:00
- **Версия и дата проверки:** 1.1, 07.09.2026.
2026-09-06 19:26:12 +03:00
- **Статус:** готово к назначению.
## Статья и исходные материалы
- **Основная статья:** Mihai Budiu и соавт. — [DBSP: Automatic Incremental View Maintenance for Rich Query Languages](https://www.vldb.org/pvldb/vol16/p1601-budiu.pdf). PVLDB 2023.
- **Кратко о статье:** Повторное выполнение полного запроса после каждого изменения данных тратит работу на уже известный результат. DBSP задаёт алгебраическую модель потоковых вычислений и преобразует пакетную программу в инкрементальную, которая обновляет представление по дельте входа и состояния. В проекте такой план сравнивается с полным пересчётом при разных размерах обновлений.
- **Почему результат актуален:** DBSP перестал быть только теоретическим прототипом и развивается внутри Feldera. Механизм автоматической инкрементализации актуален для совмещения потоковой обработки, materialized views и аналитики над меняющимися данными.
- **Артефакты и данные:** идеи статьи реализованы в активно развиваемой системе [Feldera](https://github.com/feldera/feldera), объединяющей SQL-компилятор и потоковую среду выполнения. Зафиксированная ревизия: `feldera/feldera@ab74092c6a0c` (MIT для открытой редакции; лицензии сторонних компонентов и данных проверяются отдельно).
2026-09-07 21:46:04 +03:00
- **Что уже предоставляет артефакт:** Feldera предоставляет SQL-компилятор, инкрементальный движок, примеры и benchmarks, включая соединения и агрегации. Его разрешено использовать как сравниваемую систему и эталон; готовый движок не заменяет малую реализацию команды. Проверенные исходные материалы: [проверка join и aggregate](https://github.com/feldera/feldera/blob/ab74092c6a0c/python/tests/workloads/test_aggregate_join.py), [benchmarks](https://github.com/feldera/feldera/blob/ab74092c6a0c/benchmark/README.md).
2026-09-06 19:26:12 +03:00
## Обязательный результат
- **Проверяемый вопрос или утверждение:** инкрементальная программа выполняет работу, зависящую преимущественно от размера изменения и затронутого состояния, и поэтому выигрывает у полного пересчёта при достаточно малых обновлениях.
2026-09-07 21:46:04 +03:00
- **Технический результат:** Независимо реализовать малый инкрементальный движок для зафиксированных запросов с фильтрацией, агрегацией и соединением; хотя бы один запрос должен сочетать соединение и агрегацию. Добавить Feldera и полный пакетный пересчёт как сравниваемые варианты, общий генератор обновлений и автоматическую проверку эквивалентности после каждой серии.
- **Обязательное приращение команды:** Независимо реализовать инкрементальное обслуживание хотя бы одного запроса, сочетающего соединение и агрегацию. Сопоставить его с Feldera и полным пакетным пересчётом на одинаковых обновлениях, проверяя эквивалентность после каждой серии.
- **Эксперимент:** Сравнить собственное инкрементальное выполнение, Feldera и полный пересчёт на одинаковых запросах и сериях обновлений. Измерить время и память, проверить эквивалентность и определить режимы, в которых преимущество инкрементального подхода исчезает.
2026-09-06 19:26:12 +03:00
- **Границы выводов:** преимущество инкрементального выполнения проверяется для выбранных операторов, запросов и серий обновлений; результат не характеризует полный SQL и распределённую производительность Feldera на производственных данных.
2026-09-07 21:46:04 +03:00
- **Ресурсный профиль:** Локально, CPU, 8–16 ГБ памяти. При высокой стоимости стека Feldera уменьшить данные и запросы для контрольного сравнения трёх вариантов; основные серии собственного движка и полного пересчёта можно провести отдельно на большем объёме. Независимая реализация запроса с соединением и агрегацией сохраняется.
2026-09-06 19:26:12 +03:00
## Содержательные направления
2026-09-07 21:46:04 +03:00
- запросы, общий генератор и пакетный пересчёт.
- собственный инкрементальный движок и проверка корректности.
- сравнение с Feldera, профилирование и границы применимости.
2026-09-06 19:26:12 +03:00
## Возможное продолжение
Исследовать перекос ключей, размер пакета обновлений, поздние исправления, стоимость хранения состояния либо запрос, для которого автоматическая инкрементализация даёт неожиданно слабый результат.
2026-09-07 21:46:04 +03:00
## История уточнений
| Дата | Версия | Основание | Изменение обязательного результата |
|---|---|---|---|
| 07.09.2026 | 1.1 | Статический просмотр закреплённого артефакта: готовые сценарии частично покрывают задание. | Собственный инкрементальный запрос с соединением и агрегацией обязателен; Feldera и полный пересчёт служат сравнению. |