2010-06-25 52 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