Как Acadia решает проблему 1+N, запретив циклы и рекурсию

Solving the 1+N Query Problem

ORM-библиотеки часто приводят к проблеме 1+N: вместо одного JOIN выполняется множество отдельных запросов, что замедляет работу. Автор объясняет, что корень проблемы — в выразительности языка, позволяющей циклы и рекурсию. Вдохновившись языком Datalog, Acadia полностью исключает рекурсию, гарантируя завершение всех запросов за полиномиальное время и невозможность проблемы 1+N. В статье показано, как Acadia использует оператор intersect для эффективного соединения таблиц.

Оказывается, мы можем полностью устранить проблему 1+N, но, что еще интереснее, мы также можем гарантировать, что все запросы завершаются, и даже сильнее — что все запросы завершаются за время, полиномиально зависящее от объема данных!

Ещё за этот день

2026-08-25