什么是你的经验,在谷歌App Engine的开发?
-
22-08-2019 - |
题
时GQL简单易学的人谁知道SQL?如何为Django的/ Python的?难道App Engine的真正使缩放容易吗?有没有针对“GQL注射液”任何内置的保护?等等...
我很想听听使用应用程序引擎的不那么明显的起伏。
干杯!
解决方案
最明显的和令人沮丧的问题是数据存储API,它看起来不错,是非常深思熟虑和易于使用,如果你正在使用SQL,但在所有查询结果集一个1000行限制的工作,你可以”牛逼访问计数或偏移超出。我碰到的怪异的问题,有没有真正能够为模型添加或访问数据,一旦超越了1000行。
请参阅有关1000行限制涉及的堆栈溢出讨论>
咸海巴尔干写的这个问题和其他问题的一个很好的总结
说了这么多,应用程序引擎是一个真正伟大的工具,必须在那些处理,我真的很享受与它的工作。这是完美的微部署Web服务(例如:JSON API的)。在其他应用程序使用
其他提示
我与谷歌应用程序引擎的经验已经很大,而在 1000 结果限制已删除,这里是发行说明的链接:
没有更多的1000结果限制 - 这是 右:用另外光标并 许多小高潮 数据存储的稳定性和性能 在过去的几个月的改进, 我们现在有足够的信心,以除去 最大结果完全限制。 无论你正在做一个获取, 迭代,或使用游标,有 上的结果的数量没有限制。
GQL是非常简单 - 它是SQL的一个子集“SELECT”语句,仅此而已。这是仅在较低级别的API的顶部的方便层,然而,所有的语法分析在Python进行。
相反,我建议使用查询API,这是程序性的,不要求运行时解析,并使得“GQL注射”漏洞完全不可能(尽管它们在正确写入GQL不可能反正)。查询API很简单:调用。所有()模型类,或致电db.Query(MODELNAME)。查询对象有.filter(field_and_operator,值),.order(field_and_direction)和.ancestor(实体)的方法,除了所有的设施GQL对象有(获得(),.fetch().Count之间的())等)中的每一个查询方法返回查询对象本身为方便起见,这样就可以把它们连:
结果= MyModel.all()过滤器( “富=”,5).order( “ - 巴”)。取(10)
等同于:
结果= MyModel.gql( “WHERE富= 5 ORDER BY巴DESC LIMIT 10”)。取()
使用AppEngine上工作时的一个主要缺点是1K查询限制,已在评论中已经提到。我还没有看到,虽然提到的是,有一个事实内置的排序顺序,使用它可以解决此问题。 从应用服务引擎食谱:
def deepFetch(queryGen,key=None,batchSize = 100): """Iterator that yields an entity in batches. Args: queryGen: should return a Query object key: used to .filter() for __key__ batchSize: how many entities to retrieve in one datastore call Retrieved from http://tinyurl.com/d887ll (AppEngine cookbook). """ from google.appengine.ext import db # AppEngine will not fetch more than 1000 results batchSize = min(batchSize,1000) query = None done = False count = 0 if key: key = db.Key(key) while not done: print count query = queryGen() if key: query.filter("__key__ > ",key) results = query.fetch(batchSize) for result in results: count += 1 yield result if batchSize > len(results): done = True else: key = results[-1].key()
与远程API上述代码一起(参见这篇文章)允许你,因为你需要获取尽可能多的实体。
可以使用上面的这样的代码:
def allMyModel(): q = MyModel.all() myModels = deepFetch(allMyModel)
起初我有过同样经历的人谁从SQL转换到GQL - 一种奇怪的不能够做到连接,数超过1000行,等等。现在,我已经用它工作了几年几个月里,我绝对喜欢的应用程序引擎。我移植我所有的旧项目置于其上。
我用它来举办一些高流量网络应用(在高峰时间其中之一得到50K打一分钟。)
谷歌App Engine不使用一个实际的数据库,显然使用某种分布式哈希地图。这将借给自己是谁习惯于SQL人就是不会看到在第一一些不同的行为。因此,例如获得在常规SQL的项目数有望成为一个快速的操作,但GQL它只是不会相同的方式工作。
下面是一些更多的问题:
http://blog.burnayev.com/2008/04/gql -limitations.html
在我个人的经验,这是一个调整,但学习曲线是好的。