10件你可能不知道的有关GAE的事

标签:Google App Engine

刚看了《10 things you (probably) didn't know about App Engine》这篇文章,还真发现确实有我不知道的,所以就稍微翻译下吧~

这篇文章的作者是GAE团队的Nick Johnson,所以不用担心真实性。
  1. App版本是字符串,不是数字。
    所以你可以用任意字符串来做版本,例如dev,而访问时则可通过这个URL:dev.latest.yourapp.appspot.com。
    当然,如果包含特殊字符,可能是没法这样访问的。例如空格会被自动替换成%20,不过我没试过=。=
  2. 一个App可以同时运行多个版本。
    这个应该是众人皆知的事情了,不过真正让我意外的是,每个版本使用的是不同的实例。
    这就意味着,你可以在版本A里使用Python环境,而在版本B里使用Java环境,而且它们共用一个数据库和memcache。
  3. Java运行环境支持所有可以编译为Java字节码的语言。
    因此你可以在GAE上使用JRuby、Groovy、Scala、Rhino (一个JavaScript解释器)、Quercus (一个PHP解释/编译器)和Jython等语言。
  4. IN和!=操作符会生成多条数据库查询。
    文档里有说明,不用解释了。
  5. put、get和delete支持批操作。
    简单来说就是用db的方法来取代model的方法。
    当时看有人测试GAE数据库性能时,我就发现那人没用这种方法,于是性能相差4倍。
  6. 数据库性能不取决于你有多少实体。
    查询性能只取决于一次操作返回的实体。
    原因被作者糊弄过去了,也没说put和delete的性能。实际上经我测试,后者和实体及实体上的索引多少密切相关。
  7. 构造索引的时间并不完全取决于实体的大小。
    按作者的说法,大致意思是当添加新索引时,索引并不会立刻生效,而是有个后台任务帮你更新。
  8. Stored Data值每天更新一次。
    这就是为什么添加或删除很多实体时,在后台看到的数据库大小没变的原因。
  9. app.yaml、web.xml和appengine-web.xml中的handler是按顺序匹配的。
    所以越详细的路径就越应该放在前面,避免因冲突而覆盖。
  10. 你不需要手动构造GQL字符串。
    因为GQL提供占位符和bind函数。
    不过我习惯使用Query对象,只是没法使用bind函数=。=

0条评论 你不来一发么↓

    想说点什么呢?