Creating a tag cloud in the engine application is really difficult, because the data warehouse does not support the GROUP BY construct, which is usually used to express it; It also does not provide a way to sort by the length of a list property.
One of the key considerations is that you need to often show a tag cloud, but you do not need to create it unless there are new articles or articles get retagged since you will get the same clout tag anyway; In fact, the tag cloud does not change much for each new article, perhaps the tag in the cloud becomes a little big or a little smaller, but not much, but not in a way that will affect its usefulness.
This suggests that tag clouds should be created periodically, cached, and displayed just like static content. You should think about this in the task queue API.
Another query listing articles by tag will be completely unconfirmed by the first technician you showed; Inverting, having a tag model with articles ListProperty does support the request, but will suffer from update competition when popular tags need to be added to it at a high speed. Another method that uses the association model does not suffer from any of these problems, but complicates the convenience of adding queries to the list of articles.
The way I will deal with this is to start with the ArticlesAndTags model, but add some extra data to the model in order to have a useful order; the date of the article, the name of the article, which makes sense for the specific type of site you are creating. You will also need a monotonous sequence (e.g. timestamp) so you know when the tag was applied.
The tag cloud request will be supported using a tag object that has only a numerical article counter, as well as a link to the same time stamp used in the ArticlesAndTags model.
Then the task queue can request the 1000 oldest ArticleAndTags, which are newer than the oldest tag, summarize the frequencies of each of them and add them to the counts in the tags. Deleting tags is probably rare enough that they can immediately update the tag model without too much disagreement, but if this assumption turns out to be wrong, then delete the events in ArticleAndTags as well.