比方說你有一個實體是這樣的。GAE數據存儲緩存鍵VS過濾
postid=db.StringProperty()
comment=db.StringProperty()
用於存儲對由帖子ID標識的某個帖子的評論。 評論可以打到數十億條記錄。現在,如果你想 獲得屬於某個職位,你可以做所有的意見,
query=Comment.all()
query.filter('postid = ','id').
還是不要做,你可以這樣定義
class Post(db.Model)
commentids=db.StringListProperty()#store list of comment ids
這樣你就可以直接將意見後通過做
comment=Comment.get_by_key_name('commentkey')
從長期來看(在評論擊中千萬甚至上億馬克),這一個 更有效。換句話說哪一個更合適。
通過這樣做,雖然,在HR數據存儲你限制自己的每秒每實體組約1-2寫。如果你希望評論每篇文章的頻率很高,那麼你將有減輕 (嘗試使用拉隊列或推式隊列,執行速率爲2/s)或顯式捕獲爭用異常並在稍後重試該帖子。 – someone1
當您需要交易時,將使用實體組,而不是作爲父子關係。 –
@PeterKnego我認爲有,即使你不需要交易,你可以使用祖先其他例子。例如,如果您有用戶和設置實體,則可以使用相同的'key_name'進行不同類型的設置以獲得以下優點:'設置。get_or_insert(background_color,parent = user_db,value ='#ff0000')'沒有在key_name中包含難看和唯一的東西:) – Lipis