Files
nis2/project-tasks/p13-noria.md
T

6.2 KiB
Raw Blame History

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-окружение; если его сборка блокирует проект, команда независимо реализует ограниченный граф операторов и проверяет тот же механизм на синтетической и веб-нагрузке.

Содержательные направления

  • генератор нагрузки и базовые варианты.
  • граф операторов и материализация.
  • политика памяти, инструментирование и динамические сценарии.

Возможное продолжение

Динамически добавить запрос, изменить долю популярных ключей, распределить граф между процессами либо предложить другую политику вытеснения и восстановления состояния.