GAE SDK 1.4.3版发布

标签:Google App Engine

前几天Google发布了GAE SDK 1.4.3 Prerelease版,今天终于盼来正式版了,对我来说最重要的当然是文档了。

首先不得不提的是Prospective Search API
文档写得很生涩,所以我还是用自己的理解来介绍吧。实际上它是用来进行信息过滤之类的处理的。

简单来说,假设我要做个微博系统。当用户发表了一条tweet时,如果包含了earthquake,我希望让所有关注earthquake的人都接收到这条信息。通常的情况是用户自己去search,然而这样很低效,时效性也不高。有了Prospective Search API后,我可以注册一个过滤器,凡是包含earthquake的信息都POST到一个handler,再由这个handler进行Channel push之类的工作,让用户第一时间接收到。
这样的好处是我可以注册很多个过滤器(例如有的人关注loli,有的人关注money),之后就不需要每次都自行去过滤了。坏处就是它其实是用的task queue,超过10kb的task对象需要保存到datastore,会影响处理效率。

下面来个简单的例子。

定义Tweet类:
class Tweet(db.Model):
	user = db.StringProperty(required=True)
	content = db.TextProperty()
	time = db.DateTimeProperty(auto_now_add=True)

注册过滤器:
prospective_search.subscribe(Tweet, 'content:earthquake', 'earthquake') # 订阅所有content包含earthquake的Tweet
prospective_search.subscribe(Tweet, 'user:loli OR lolicon', 'loli') # 订阅所有user包含loli或lolicon的Tweet
具体的查询语法可以看Query Language Overview,model的属性并不需要为indexed。此外,文档里还提到了可以查询中文,但是本地测试时貌似无效。

捕捉订阅的文档:
class Handler(webapp.RequestHandler):
	def post(self):
		tweet = prospective_search.get_document(self.request) # 之后就自己去push吧

application = webapp.WSGIApplication([
	('/_ah/prospective_search', Handler)
])
顺带一提,get_document函数需要用到webapp.request对象,所以我用了webapp.RequestHandler来简化。如果你想要用YUI的话,由于它和webapp的接口是差不多一致的,因此也是可以直接替换的。不过如果用其他框架的话,可能就得自行处理POST的内容了。

处理文档:
tweet = Tweet(user='aaa', content='What a terrible earthquake!') # 不需要put到datastore
prospective_search.match(tweet)

prospective_search.match(Tweet(user='lolicon', content=u'我爱loli'))
你会发现执行这段代码后,/_ah/prospective_search就会接收到2条请求了,并且获得了这2个tweet。

其他的就很简单了,自己看文档吧~


另一个新功能则是Testbed Unit Test Framework
我们在本地进行单元测试时,经常需要初始化测试数据,这对需要改写文件的datastore来说显得很麻烦(得清空数据库)。而testbed这个框架相当于在内存里实现了各种API服务,因此初始化数据就显得很简单了。文档很简单,我就不再介绍了。
注意通过测试并不代表云端运行也是OK的,两者仍然会有些差异。


此外,Java方面多了个Concurrent Requests功能。也就是说,以前在处理请求时,一个instance只能同时处理一个请求;而如果开启这个功能的话,这个instance可以使用多个线程来同时处理多个请求,但这就要求你的handler必须是线程安全的(比如使用全局对象时要加锁)。
这个功能我估计不会引入到Python中,一是Python的多线程不如多进程,二是启动Python实例不像启动Java实例那么慢。


最后,Google还提到了1.4.4版的改动,将引入角色分级系统,将管理员细分为Viewer(只能查看应用的管理员控制台)、Developer(可通过管理员控制台查看和编辑应用)和    Owner(查看、删除、编辑应用,邀请和改变用户角色)。

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

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

    想说点什么呢?