GAE SDK 1.6.5版发布

标签:Google App Engine

等了数年以后,Google终于在GAE SDK 1.6.5版解决了一个让我唏嘘的限制(我曾写信提醒过可以如何解决,可始终没有动静),下面就来看看这次更新吧:
  1. 实验性地支持projection queries(投射查询)。
    它的意思是以前只能查询实体的所有属性,即SELECT * FROM ...,而使用投射查询则可以查询部分属性,例如SELECT A, B FROM ...。
    这种查询只会访问索引(不访问实体本身),因此性能与keys only的查询相当,但会有下述限制:
    • 只能查询索引过的属性。当想通过文章标题查询文章内容时,如果内容为TEXT类型,自然就不能查询了。
    • 不能查询用等号修饰的属性,即SELECT A FROM kind WHERE A = 1(因为结果肯定是1)。但SELECT B FROM kind WHERE A = 1或SELECT A FROM kind WHERE A > 1是可以的。
    • 不能在一个查询里投射2次相同属性,即SELECT A, A FROM ...。
    • 因为返回的实体是不完整的,所以不能保存回datastore。
    除了使用GQL外,还能用db.Query来构建查询,但目前不能用NDB来构建(不过NDB也可以用GQL来构建)。
    例如我要查询本站某篇文章的发布时间:
    class Article(db.Model):
    	title = db.StringProperty(required=True)
    	time = db.DateTimeProperty(auto_now_add=True)
    	# others...
    
    article = db.GqlQuery(u"SELECT time FROM Article WHERE title = 'GAE SDK 1.6.4版发布'").get()
    print article.time
    
    article = db.Query(Article, projection=('time',)).filter('title =', u'GAE SDK 1.6.4版发布').get()
    print article.time
    
    article = Article.all().filter('title =', u'GAE SDK 1.6.4版发布').get(projection=('time',))
    print article.time
    
    article = Article.all().filter('title =', u'GAE SDK 1.6.4版发布').fetch(1, projection=('time',))
    print article[0].time
    这里要注意的是,这个查询需要定义一条复合索引:
    - kind: Article
      properties:
      - name: title
      - name: time
    这种查询是不能使用merge join的,所以只要涉及到多个属性,几乎都需要复合索引。例如查询id为1的文章标题:
    article = db.Query(Article, projection=('title',)).filter('__key__ =', db.Key.from_path('Article', 1)).get()
    也需要一条:
    - kind: Article
      properties:
      - name: __key__
      - name: title
    虽然title的内置索引里就有__key__,但顺序是不同的,也就不能复用。
  2. 在High Replication Datastore里,实体会有个__entity_group__元数据,用于标识实体组的版本。每次修改时,版本号都会递增。
  3. Images API可以访问Google Cloud Storage里存储的图像元素。
  4. Images API的get_serving_url()函数可以指定secure_url=True参数,这样生成的图片可以通过HTTPS访问。
  5. Task Queue REST API可以在向Pull Queue插入任务时指定tag。
  6. Task Queue API可以指定lease_tasks的超时时间。默认的超时时间从5秒延长到10秒。
  7. 可以使用计划任务来备份datastore
  8. Datastore Admin现可显示备份还原信息。
  9. 可在Datastore Admin里中止显示备份。
  10. 可以还原Datastore备份里的单一kind。
  11. 在管理员控制台里增加“Report Production Issue”链接,如果你的应用出了什么问题,可以点击提交。
  12. 用户请求头增加X-AppEngine-Region、X-AppEngine-City和X-AppEngine-CityLatLong,可以基于用户IP来获知地理位置(以前仅精确到国家)。
  13. 可以在app.yaml里设定os.environ环境变量,例如:
    env_variables:
      DJANGO_SETTINGS_MODULE: 'myapp.settings'

7条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?