我希望儘可能高效,並且計劃正確。由於在使用Google App Engine時讀寫成本非常重要,因此我想確保將這些成本降至最低。我不瞭解數據存儲區中的「關鍵」概念。我想知道的是,通過密鑰獲取實體,比考慮我知道它是什麼,而不是通過某種過濾器獲取更有效率?通過Google API中的過濾器獲取關鍵字和獲取內容
假設我有一個名爲User的模型,並且用戶有一個commentIds數組(列表)。現在我想獲得所有這個用戶的評論。我有兩種選擇:
用戶的commentId數組是一個鍵數組,其中每個鍵都是Comment實體的鍵。由於我擁有所有密鑰,因此我只能通過密鑰獲取所有註釋。
用戶的commentId數組是我自定義的標識符,在這種情況下,我們只是說他們是自動遞增常規整數,並且數據存儲區中的每個註釋都有唯一的commentIntegerId。所以現在如果我想要得到所有的評論,我會根據所有帶ID的註釋在我的數組中進行過濾提取。
哪個實現會更有效率,爲什麼?
您是否考慮過第三個選項:用戶密鑰是該用戶的評論鍵的父代(祖先)? – alex 2012-04-15 18:16:05
您能詳細說明一下嗎.. – Snowman 2012-04-15 18:23:04
意思是,您可以簡單地使用數據存儲結構,而不是在用戶模型中使用屬性列表:註釋鍵具有父鍵和用戶鍵。所以,以後,當你想要獲得用戶的所有評論時,你可以'Comment.query(ancestor = user_key)'(在Python,NDB中)或'ds.prepare(新的Query(「Comment」,userKey))'(Java)。換句話說,您不保留任何額外的實體屬性來保存註釋鍵列表。 – alex 2012-04-15 18:33:31