# P21. DBSP/Feldera: инкрементальное выполнение запросов - **Версия и дата проверки:** 1.1, 07.09.2026. - **Статус:** готово к назначению. ## Статья и исходные материалы - **Основная статья:** 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 для открытой редакции; лицензии сторонних компонентов и данных проверяются отдельно). - **Что уже предоставляет артефакт:** 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). ## Обязательный результат - **Проверяемый вопрос или утверждение:** инкрементальная программа выполняет работу, зависящую преимущественно от размера изменения и затронутого состояния, и поэтому выигрывает у полного пересчёта при достаточно малых обновлениях. - **Технический результат:** Независимо реализовать малый инкрементальный движок для зафиксированных запросов с фильтрацией, агрегацией и соединением; хотя бы один запрос должен сочетать соединение и агрегацию. Добавить Feldera и полный пакетный пересчёт как сравниваемые варианты, общий генератор обновлений и автоматическую проверку эквивалентности после каждой серии. - **Обязательное приращение команды:** Независимо реализовать инкрементальное обслуживание хотя бы одного запроса, сочетающего соединение и агрегацию. Сопоставить его с Feldera и полным пакетным пересчётом на одинаковых обновлениях, проверяя эквивалентность после каждой серии. - **Эксперимент:** Сравнить собственное инкрементальное выполнение, Feldera и полный пересчёт на одинаковых запросах и сериях обновлений. Измерить время и память, проверить эквивалентность и определить режимы, в которых преимущество инкрементального подхода исчезает. - **Границы выводов:** преимущество инкрементального выполнения проверяется для выбранных операторов, запросов и серий обновлений; результат не характеризует полный SQL и распределённую производительность Feldera на производственных данных. - **Ресурсный профиль:** Локально, CPU, 8–16 ГБ памяти. При высокой стоимости стека Feldera уменьшить данные и запросы для контрольного сравнения трёх вариантов; основные серии собственного движка и полного пересчёта можно провести отдельно на большем объёме. Независимая реализация запроса с соединением и агрегацией сохраняется. ## Содержательные направления - запросы, общий генератор и пакетный пересчёт. - собственный инкрементальный движок и проверка корректности. - сравнение с Feldera, профилирование и границы применимости. ## Возможное продолжение Исследовать перекос ключей, размер пакета обновлений, поздние исправления, стоимость хранения состояния либо запрос, для которого автоматическая инкрементализация даёт неожиданно слабый результат. ## История уточнений | Дата | Версия | Основание | Изменение обязательного результата | |---|---|---|---| | 07.09.2026 | 1.1 | Статический просмотр закреплённого артефакта: готовые сценарии частично покрывают задание. | Собственный инкрементальный запрос с соединением и агрегацией обязателен; Feldera и полный пересчёт служат сравнению. |