2010-08-18 31 views
1

当开始任何新的主要图书馆或系统时,我去StackOverflow的“我应该知道什么?”的问题。答案可能是主观的,但建议通常会为我节省很多小时的麻烦。到目前为止,我已经在Google App Engine上烧了几个小时,绊倒了更多有经验的开发人员在这里已经知道的相同问题。最喜欢的谷歌应用程序引擎技巧和功能

我终于找到以下常见问题:

  • appcfg.py上传不会出现在 的谷歌仪表板,直到你从版本标签选择 他们。
  • 如果您想要一致的响应时间,则使用cron作业来保持应用程序不被取消是 。这将成为“共同问题的悲剧”(感谢尼克)。
  • Eclipse中的PyDev可以很好地与Google App Engine配合使用。
  • 为Ubuntu 10.04获取本地版本的Python 2.5很难。或者你可以“sudo add-apt-repository ppa:fkrull/deadsnakes”来获得它。
  • 使用VirtualEnvWrapper将GAE中的Python2.5与用于其他任何其他版本的Python分离。
  • appspot上的应用程序只有在不方便的情况下切换到新的更新版本,无论控制面板是什么。您应该在标题或页脚中保留一个版本号以避免大肆追逐。

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

+0

应该是社区问题? – 2010-08-19 20:27:54

回答

3

有一个可怕的很多涵盖。如果你有一个你感兴趣的特定领域,或许我们可以提供更具体的东西。总的来说,我将利用这个机会来插入my blog,它有很多App Engine的材料。

我会再跟你点中的一个,但是:

使用cron作业从被未被供电保持一个应用程序,如果你想一致的响应时间是必要的。

首先,这是一个'公地悲剧'问题。当他们空闲时,应用程序将不定时为正在提供流量的应用程序开路;一群运行'keepalive'cronjobs的人强制所有的应用程序更快地卸载,让每个人都变得更糟。

其次,你总是会得到偶尔的装载要求,即使是存活cron作业。您的应用程序的其他实例在需要时安排,所以每当你获得的流量激增会出现这种情况,有人难免会载入要求。

最后,装载请求并不需要成为一个大问题。特别是我们最近增加了最近的Python预编译的支持,载入要求不必花费大量的时间和工作,你花在优化将所有您的用户受益。

+0

它似乎是公地悲剧。不过,谁想要应用程序需要10秒钟才能在页面之间加载? – 2010-09-02 19:56:11

+0

除非您导入真正令人惊叹的代码量,否则您的应用程序不会花费10秒。减少这是一个很好的优化策略,并且会改善所有请求,而不仅仅是加载请求。 – 2010-09-03 08:38:45

1

如果您使用的是“为/在”查询,如:“查找该用户列表今天有人创建活动”,你会发现,这样的查询不结垢,作为数据存储将其转换到n个查询中,其中n是“用户”的大小。

为了解决这个问题,我给你可计算的键名。在上面的示例中,事件的密钥名称为:

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

这样,您可以计算给定今天日期的实体的所有可能键名称。一旦你有了这个列表,您可以使用:

db.get_by_key_name(key_names) 

...它取并行的实体,并且比使用“IN”查询更快!