我只是在学习Google App Engine,并试图想出一个很好的方法来管理我与Google Cloud SQL实例的数据库连接(如果你还没有使用GC-SQL,基本上,它是云中的MySQL,有一些限制).
我正在使用带有webapp2框架的python(2.7)GAE环境来处理请求.我知道常见问题解答说,建议每次请求都要与DB建立新的连接,但我不知道建议的关闭连接的方法是什么.每次我尝试在开发过程中删除表时,GC-SQL挂起并且"show processlist"显示有一堆进程(可能是因为我没有关闭数据库)并且其中一个正在等待锁定(可能是这个过程试图放弃表格).这很烦人,迫使我重新启动GC-SQL实例(比如重新启动mysql-server服务,我想).我还认为偶尔存在数据库打嗝,这与我没有真正关闭数据库连接这一事实有关.
那么,例如,我的webapp2.Requesthandler子类实例上是否应该有一个析构函数来断开与DB的连接?GAE对象有时似乎被缓存,所以这也是需要考虑的事情.我想我可以为每个查询连接/查询/断开连接,但这似乎不是最理想的.
我知道这是一个模糊的问题,但我希望在这个领域有所作为的人可以按我的方式提出一些提示.
提前致谢!
更新: 我尝试使用Shay的答案作为起点,围绕需要cursot的方法实现一个包装器.我收到了GAE错误.以下是一个特定于此的新问题:App Engine中Google Cloud SQL的连接限制是什么,以及如何最好地重用数据库连接?
我们使用Datastore在App Engine上创建了一个应用程序.现在,我们已经导致使用Cloud SQL的,因为我们想用联接,嵌套查询和功能,如average,total等数据会从数据存储通过日常cron作业迁移到云SQL.
我刚刚通过以下链接了解与性能和限制相关的基本细节.
到目前为止,看起来Dier D0或D1将达到我们预期的目的.
很少有令我困惑的事情:
a)什么是待连接以及它如何影响?不确定是否抛出1033实例有太多并发请求,当它超过100.我们如何处理?是否我们可以创建250个连接,但一次只能使用100个连接?
b)250个并发连接.如果超过250,应该抛出错误太多的连接
c)每个应用程序引擎实例12个每个SQL实例的并发连接.我们如何确保每个应用引擎实例不超过12个连接?
我通过以下论坛:
App Engine中的Google Cloud SQL有哪些连接限制,以及如何最好地重用数据库连接?
在Google Cloud SQL(GAE)Python应用程序中管理数据库连接的好方法是什么?
但人们面临着某些问题.
d)我们遇到了一个OperationalError:
(2013年,当我们尝试使用1000多个请求进行测试时,"在读取初始通信数据包时丢失了与MySQL服务器的连接",系统错误:38")错误.
我们有1500多人同时使用我们的系统,看起来它会失败.因此,如果由于上述问题我们可以使用Cloud SQL,我们会感到困惑.但是应该可以使用解决方案.
有人可以帮忙吗?
python mysql google-app-engine google-cloud-sql google-cloud-datastore