在Google App Engine中有效地提供动态内容

时间:2010-04-04 14:02:57

标签: google-app-engine performance

我在谷歌应用引擎上的应用程序返回内容项(只是文本)和对它们的评论。它的工作原理如下(伪代码):

query: get keys of latest content #query to datastore
for each item in content
    if item_dict in memcache:
        use item_dict
    else:
        build_item_dict(item) #by fetching from datastore
        store item_dict in memcache
send all item_dicts to template

很抱歉,如果代码不可理解。我获取了所有内容词典并将它们发送到模板,模板使用它们来创建网页。

我的问题是,如果memcache已经过期,对于我要显示的每个项目,我必须(1)在memcache中查找项目,(2)因为不存在memcache我必须从数据存储区中获取项目,并且(3) )将项目存储在memcache中。这些电话很快就会建立起来。

我没有为memcache的条目设置过期时间,所以这实际上只发生在早上一次,但是网页需要足够长的时间来加载(~1秒)浏览器将其报告为不存在。通常情况下,我的网页需要大约50毫秒才能加载。

这种方法适用于频繁访问,但它有如上所示的缺陷。我该如何解决这个问题?这些条目足够动态,我认为缓存初始请求符合我的最佳利益。

提前致谢

1 个答案:

答案 0 :(得分:3)

您可以在memcache和数据存储上执行批量操作 - 并将所有这些操作减少到memcache的一次往返,以及针对任何缺少的条目的额外数据存储和memcache往返。请参阅memcache.get_multi and set_multidb.get上的文档。

  

我没有为此设置过期时间   memcache的条目,所以这个   真的只发生过一次   早上,但网页需要很长时间   足以加载(~1秒)的那个   浏览器报告它不存在。

咦?您的浏览器会在1秒后放弃吗?