Как вы сказали сами, вы должны упорядочить данные, чтобы облегчить масштабирование своего приложения, таким образом, вопрос Каков наилучший способ упорядочить данные, чтобы мы могли выполнять операции над наборами, такие как поиск тем в пересечении курс и тег?
Вы можете хранить свои собственные индексы этих наборов, создавая объекты CourseRef и TopicRef, которые состоят только из Key, причем часть ID является фактическим ключом соответствующей сущности. Эти объекты «Ref» будут находиться под определенным тегом, поэтому фактические ключи не дублируются. Итак, структура для данного тега: Tag \ CourseRef ... \ TopicRef ...
Таким образом, используя тег и курс, вы создаете Key Tag \ CourseRef и делаете запрос предка , который дает вам набор ключей, которые вы можете получить. Это очень быстро, так как на самом деле это прямой доступ, и он должен обрабатывать большие списки курсов или тем без проблем со свойствами списков.
Этот метод потребует от вас использования API хранилища данных в некоторой степени.
Как вы можете видеть, это дает ответ на конкретный вопрос, и модель не принесет пользы для других типов операций Set.