在Google App Engine中存储评论的有效方式?

时间:2012-10-31 00:41:09

标签: python google-app-engine

使用Google App Engine,实体的大小限制为1 MB。假设我有一个博客系统,并期望每篇文章有数千条评论,有些段落的长度。通常,没有限制,您只需将所有注释存储在与博客文章相同的实体中。但是在这里,人们会担心达到1 MB的限制。

另一种可能的方式,虽然效率低得多,但是将每个评论存储为一个单独的实体,但这需要几次,几次读取才能获得所有评论,而不是只读取一次以获取博客文章及其评论(如果他们在同一个实体中。)

处理此类案件的有效方法是什么?

2 个答案:

答案 0 :(得分:2)

如果评论有线索,将它们存储为单独的实体可能有意义。

如果评论可以成为投票的目标,那么将它们作为单独的实体存储是有意义的。

如果可以编辑注释,将它们存储为单独的实体可以减少争用,并避免对所有注释进行悲观锁定,或者避免上次编辑覆盖先前编辑的风险。

如果您可以翻阅评论,那么将它们存储为单独的实体是有道理的,原因有多种,索引是一个。

答案 1 :(得分:1)

我有六条建议:

1)将评论存储在单独的实体中。使用NDB API,它构建了缓存和游标。因此,您可以限制每个视图的查询成本。您可以使用仅键查询,祖先和投影查询来快速访问。请参阅:https://developers.google.com/appengine/docs/billing

2)单独的实体使并发和索引更容易。

3)查看Search API和Prosepective Search API。如果您有很多评论,搜索将非常重要。由于搜索,您应该使用单独的实体进行评论,这样可以非常轻松地访问搜索结果。

4)当您使用mapreduce等工具分析评论时,处理单独的实体也是首选。

5)您可以随时根据您的博客引擎和appstats的经验进行优化。数据存储是真正的瓶颈还是使用的实例数。我不知道你的用例,但你也可以使用客户端(浏览器)来优化和缓存结果。

6)那么处理评论的第三方解决方案呢?请参阅Nick Johnson的这篇文章,使用Disqus javascript进行评论并在他的应用引擎博客引擎中搜索:http://blog.notdot.net/2009/10/Blogging-on-App-Engine-part-6-Comments-and-Search