【问题标题】:Favorite Google App Engines Tips and Features最喜欢的 Google App Engines 提示和功能
【发布时间】:2011-03-31 20:43:39
【问题描述】:

当开始使用任何新的主要库或系统时,我会去 StackOverflow 了解“我应该知道什么?”问题。答案可能是主观的,但这些建议通常会为我省去很多时间的麻烦。到目前为止,我已经在 Google App Engine 上花费了好几个小时来解决这里更有经验的开发人员已经知道的相同问题。

我最终发现了这些常见问题:

  • appcfg.py 上传不会出现在 Google 仪表板,直到您选择 它们来自版本标签。
  • 使用 cron 作业来防止应用程序不被服务是 如果您想要一致的响应时间,这是必要的。这将成为“公地悲剧”(感谢尼克)。
  • Eclipse 中的 PyDev 可以很好地与 Google App Engine 配合使用。
  • 很难为 Ubuntu 10.04 获取本地版本的 Python 2.5。或者你可以“sudo add-apt-repository ppa:fkrull/deadsnakes”来获取它。
  • 使用 VirtualEnvWrapper 将您的 Python2.5 for GAE 与其他用于其他一切的 Python 版本隔离开来。
  • appspot 上的应用程序只有在不方便时才会切换到新更新的版本,而不管控制面板说什么。您应该在标题或页脚中保留一个版本号,以免引起麻烦。

那么,我还应该知道什么?

【问题讨论】:

  • 应该是社区问题?

标签: eclipse google-app-engine cron pydev ubuntu-10.04


【解决方案1】:

如果您使用“for/in”查询,例如:“查找此用户列表中某人今天创建的事件”,您会发现此类查询无法扩展,因为数据存储会将其转换为n 个查询,其中 n 是“用户”的大小。

为了解决这个问题,我分配了可计算的键名。在上面的示例中,事件的键名将是:

event_<dd/mm/yy>_<user_key>

这样,您可以计算给定今天日期的实体的所有可能键名。获得此列表后,您可以使用:

db.get_by_key_name(key_names) 

...它并行获取实体,并且比使用“IN”查询快得多!

【讨论】:

    【解决方案2】:

    要涵盖的内容非常多。如果您对某个特定领域感兴趣,也许我们可以提供更具体的内容。总的来说,我会利用这个机会插入my blog,它有很多App Engine 材料。

    不过,我会反对你的观点:

    如果您想要一致的响应时间,则有必要使用 cron 作业来防止应用程序无法服务。

    首先,这是一个“公地悲剧”问题。当应用程序空闲时,它们会被计划外,以便为服务流量的应用程序让路;一群人运行 'keepalive' cronjobs 迫使所有应用程序更快地卸载,让每个人都变得更糟。

    其次,您总是会偶尔收到加载请求,即使是使用 keepalive cron 作业。您的应用程序的其他实例会在需要时安排,因此每当您获得流量激增时,就会发生这种情况,并且不可避免地会有人收到加载请求。

    最后,加载请求并不是什么大问题。尤其是我们最近添加了最近的 Python 预编译支持,加载请求不必花费大量时间,您花在优化上的工作将使您的所有用户受益。

    【讨论】:

    • 这似乎是一场公地悲剧。不过,谁希望应用程序在页面之间加载需要 10 秒?
    • 除非您要导入大量的代码,否则您的应用不会花费 10 秒。减少这是一个很好的优化策略,并且会改进所有请求,而不仅仅是加载请求。
    猜你喜欢
    • 2010-10-07
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2021-07-10
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多