2011-08-20 27 views
1

我有兩個模型中使用的所有獨特標籤的列表:GroupItem。一個Item有一個標籤列表,屬於一個Group得到一組實體

class Group(db.Model): 
    name = db.StringProperty() 

class Item(db.Model): 
    title = db.StringProperty() 
    tags = db.StringListProperty() 
    group = db.ReferenceProperty(Group) 

迄今爲止,典型的動作被添加標記到Item,從Item移除標籤,並且顯示所有Item小號匹配給定Group和標籤。

獲取Group中使用的所有唯一標籤列表的好方法是什麼?

理想情況下,我想有一個屬性在Group反映所使用的標籤:

class Group(db.Model): 
    name = db.StringProperty() 
    aggregated_tags = db.StringListProperty() 

它甚至會更好,如果這包括Item S作此標記的數量。

永久的一致性是不是必需的,也就是說,它是好的,如果標籤彙總列表不匹配的使用標籤的實際列表,只要他們成爲最終一致。

ItemGroup是不一樣的實體組中,所以我不能有更新ItemGroup同時交易。

回答

0

做到這一點,最好的辦法就是自己維護。無論何時添加或從項目中刪除標籤,都要更新標籤列表。如果您想異步執行此操作,您可以在任務隊列任務中執行此操作。

或者,你可以寫你定期運行重新計算標籤爲每個組設置了MapReduce的 - 事實上,這是非常典型的用例的MapReduce的。