Создание облака тегов в app-engine действительно сложно, потому что хранилище данных не поддерживает конструкцию GROUP BY
, обычно используемую для выражения этого;Он также не предоставляет способ упорядочения по длине свойства списка.
Одним из ключевых моментов является то, что вам необходимо показывать облако тегов часто, но вам не нужно создавать одно, за исключением случаев, когда появляются новые статьи,или статьи будут перемаркированы, поскольку в любом случае вы получите одно и то же теговое влияние;На самом деле, облако тегов не сильно меняется для каждой новой статьи, возможно, тег в облаке становится немного больше или немного меньше, но не намного, и не таким образом, чтобы это могло повлиять на его полезность.
Это предполагает, что облака тегов следует создавать периодически, кэшировать и отображать так же, как статический контент.Вы должны подумать об этом в API очереди задач.
Другой запрос, перечисляющий статьи по тегам, будет полностью не поддерживаться первой технической техникой, которую вы показали;Инвертируя его, наличие модели тегов со статьями ListProperty
поддерживает запрос, но будет страдать из-за конфликта обновлений, когда к нему будут добавляться популярные теги с высокой скоростью.Другой метод, использующий модель ассоциации, не страдает ни от одной из этих проблем, но усложняет задачу удобного выполнения запросов к списку статей.
То, как я справлюсь с этим, - начать с модели ArticlesAndTags, нодобавить некоторые дополнительные данные в модель, чтобы иметь полезный порядок;дата статьи, название статьи - все, что имеет смысл для конкретного типа сайта, который вы делаете.Вам также понадобится монотонная последовательность (скажем, метка времени), чтобы вы знали когда применен тег.
Запрос облака тегов будет поддерживаться с использованием объекта Tag, имеющего Onlyчисловой счетчик статей, а также ссылка на ту же временную метку, которая используется в модели ArticlesAndTags.
Затем очередь задач может запросить 1000 самых старых статей и тегов, которые на новее , чем самый старый тег, суммировать частоты каждого и добавить его к количеству в тегах.Удаление тегов, вероятно, достаточно редко, чтобы они могли немедленно обновить модель тега без особых разногласий, но если это предположение окажется неверным, то события delete должны быть добавлены также к ArticlesAndTags.