6.2 KiB
6.2 KiB
P13. Noria: частично материализованный потоковый граф для веб-приложений
- Версия и дата проверки: 1.1, 07.09.2026.
- Статус: готово к назначению.
Статья и исходные материалы
- Основная статья: Jon Gjengset и соавт. — Noria: Dynamic, Partially-Stateful Data-Flow for High-Performance Web Applications. OSDI 2018.
- Кратко о статье: Веб-приложениям нужны быстрые чтения производных представлений, но полная материализация всех результатов требует много памяти и усложняет обновления. Noria превращает запросы в потоковый граф, поддерживает результаты инкрементально и хранит состояние только там, где оно нужно текущим чтениям. В проекте сравниваются полная, частичная и отсутствующая материализация на изменяющейся нагрузке.
- Почему результат актуален: исходный Noria больше не развивается, однако его практическим преемником стал ReadySet, продолжающий идею инкрементально поддерживаемого кэша SQL-запросов. У ReadySet действует Business Source License 1.1 с переходом указанной версии в открытую лицензию через четыре года; условия нужно проверить перед заимствованием кода.
- Артефакты и данные: mit-pdos/noria под MIT/Apache-2.0, с сервером, встраиваемым примером, MySQL-интерфейсом и нагрузкой
voteиз статьи. Зафиксированные ревизии:mit-pdos/noria@465184ee4b57(MIT/Apache-2.0). - Что уже предоставляет артефакт: Noria предоставляет потоковый движок, частичную материализацию, интерфейсы и нагрузку
vote. Их можно адаптировать для собственного сравнения либо использовать как эталон малого прототипа.
Обязательный результат
- Проверяемый вопрос или утверждение: частичная материализация позволяет сохранить быстрые чтения и инкрементальные обновления, расходуя меньше памяти, чем полная материализация результатов всех запросов.
- Технический результат: Подготовить в Noria или собственном малом потоковом прототипе общий граф операторов с тремя режимами: без материализации, с полной и с частичной материализацией. Реализовать одинаковый генератор обновлений и чтений, автоматическую проверку эквивалентности результатов и учёт занятого и восстановленного состояния.
- Обязательное приращение команды: Подготовить описанный общий граф с тремя режимами материализации, одинаковыми обновлениями и чтениями и собственной проверкой эквивалентности. Обеспечить сопоставимый учёт памяти и восстановления состояния и объяснить наблюдаемый компромисс.
- Эксперимент: на локальном стенде или в собственном малом dataflow-прототипе сравнить отсутствие материализации, полную и частичную материализацию для read-heavy нагрузки; измерять задержку чтений и записей, память и стоимость восстановления вытесненного состояния.
- Границы выводов: компромисс памяти и задержки проверяется на выбранном графе операторов и read-heavy-нагрузке; собственный прототип не подтверждает производительность полной реализации Noria и других классов запросов.
- Ресурсный профиль: локально, CPU, 8–16 ГБ памяти. Исследовательский код использует старое Rust-окружение; если его сборка блокирует проект, команда независимо реализует ограниченный граф операторов и проверяет тот же механизм на синтетической и веб-нагрузке.
Содержательные направления
- генератор нагрузки и базовые варианты.
- граф операторов и материализация.
- политика памяти, инструментирование и динамические сценарии.
Возможное продолжение
Динамически добавить запрос, изменить долю популярных ключей, распределить граф между процессами либо предложить другую политику вытеснения и восстановления состояния.