2010-06-25 49 views
3

我應該關心Google App Engine數據存儲上實體的位置嗎? 我應該使用自定義實體鍵名稱嗎?優化appengine實體密鑰的使用

例如,我可以使用「$ article_uuid,$ comment_id」作爲Comment實體的關鍵名稱。 它會提高獲取文章的所有評論的速度嗎? 還是使用較短的鍵更好?

以這種方式使用密鑰是否是一種好習慣? 我可以使用「$ article_uuid,$ COMMENT_ID」鍵名也而非指數:

def get_comments(article_uuid, limit=1000): 
    key_prefix=db.Key.from_path('Comment', article_uuid) 
    q = Comment.gql("where __key__ > :key_prefix and __key__ < :range_end", 
     key_prefix=key_prefix, range_end=key_prefix+chr(ord(',')+1)) 
    return q.fetch(limit) 

回答

1

數據的地方將與您key_name方案(ref, see slide 40)得到改善 - 因爲你的key_name的前綴與相應的文章ID一起,給定文章的評論應該彼此靠近存儲。你提出的key_name似乎不會太長。我不認爲在存儲空間或序列化/反序列化時間方面,你會發現這個和更短的鍵之間的區別太大。我預計實體的大小將由實體的其他部分支配。

+0

不幸的是,我似乎無法挖掘該演示文稿的副本或視頻。如果您有興趣閱讀更多內容,請點擊這裏(http://code.google.com/appengine/articles/)上的很多優秀文章。 – 2010-06-25 21:28:37

+1

是的,具有共同前綴的實體可能最終在同一臺平板電腦上 - 但這並不意味着它們會以更快的速度加載。不同平板電腦上的實體可能位於不同的平板電腦服務器上,因此將從每臺服務器並行加載。 – 2010-06-25 21:54:45