Учитывая ваши требования, я бы сказал, что использование нескольких вложенных b-деревьев является хорошим решением.
Вы также можете рассмотреть возможность использования одного b-дерева и некоторого умного кодирования ключа, чтобы для каждого сегмента в ключе (пути) были зарезервированные min-token и max-token.
Наличие такого ключа позволит вам использовать стандартные методы доступа b-tree для ваших запросов.
"что будет следующим пунктом для этого пользователя" будет: найти ключ больше App > User > Item > **MAX**
и «каков следующий пользователь для этого приложения» будет: найти ключ больше, чем App > User > **MAX**
Для второго подхода (кодирование ключей вместо вложенных деревьев) подойдет любое решение No-SQL на основе b-дерева. Какой из них выбрать, зависит от вашей среды программирования и других возможных требований.