当从任何新的主要库或系统开始时,我会去StackOverflow获取“我应该知道什么?”的问题。答案可能是主观的,但建议通常可以节省我很多小时的麻烦。到目前为止,我已经在谷歌应用引擎上熬了几个小时,因为这里的经验丰富的开发人员已经知道这些问题。
我最终发现了这些常见问题:
那么,我还应该知道什么呢?
答案 0 :(得分:3)
要报道的内容非常多。如果你有一个你感兴趣的特定领域,也许我们可以提供更具体的东西。一般来说,我将利用这个机会来插入my blog,它有很多App Engine材料。
但是我会对你的一个观点提出异议:
如果您需要一致的响应时间,则必须使用cron作业来保持应用程序不被保留。
首先,这是“公地悲剧”的悲剧。如果应用程序处于闲置状态,可以为正在投放流量的应用程序让位;一群运行'keepalive'cronjobs的人强迫所有应用程序更快卸载,让每个人都变得更糟。
其次,即使使用keepalive cron作业,您总是会偶尔获得加载请求。您的应用程序的其他实例会在需要时进行安排,因此每当您获得大量流量时,就会发生这种情况,并且有人将不可避免地收到加载请求。
最后,加载请求不一定是个大问题。特别是最近添加的Python预编译支持,加载请求不需要花费大量时间,而您在优化上花费的工作将使所有您的用户受益。
答案 1 :(得分:1)
如果您正在使用“for / in”查询,例如:“查找此用户列表中的某人今天创建的事件”,您会发现此类查询无法扩展,因为数据存储区将其转换为n个查询,其中n是“用户”的大小。
为了解决这个问题,我分配了可计算的密钥名称。在上面的示例中,事件的键名称为:
event_<dd/mm/yy>_<user_key>
这样,您可以计算今天给定的实体的所有可能的键名。获得此列表后,您可以使用:
db.get_by_key_name(key_names)
...并行获取实体,并且比使用“IN”查询快得多!