【问题标题】:Efficiently Serving Dynamic Content in Google App Engine在 Google App Engine 中高效地提供动态内容
【发布时间】:2010-04-05 00:26:08
【问题描述】:

我在谷歌应用引擎上的应用返回内容项(只是文本)和它们上的 cmets。它的工作原理是这样的(伪代码):

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 中的条目设置过期时间,所以这实际上只在早上发生一次,但是网页需要足够长的时间来加载(约 1 秒),浏览器会报告它不存在。通常,我的网页加载大约需要 50 毫秒。

这种方法适用于频繁访问,但存在如上所示的缺陷。我该如何补救?这些条目足够动态,我认为缓存我的初始请求不符合我的最大利益。

提前致谢

【问题讨论】:

    标签: google-app-engine performance


    【解决方案1】:

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

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

    嗯?您的浏览器在 1 秒后退出?

    【讨论】:

    • 谢谢,这将有很大帮助。是的,出于某种原因,Chrome 有时真的很容易放弃。
    • 这听起来像是 chrome 中的错误,而不是您的网页的问题。
    猜你喜欢
    • 2016-01-22
    • 2017-10-06
    • 1970-01-01
    • 2013-06-18
    • 2017-08-15
    • 2012-04-26
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多