我最近一直在探索Tornado web框架以通过许多不同的客户端来服务许多一致的连接。Tornado Web框架Mysql连接处理
我有一个请求处理程序,基本上需要一个RSA加密的字符串和解密。解密后的文本是一个XML字符串,由我编写的SAX文档处理程序解析。一切正常,并且执行时间(每个HTTP请求)大约为100毫秒(通过解密和解析)。
XML包含用户的用户名和密码哈希值。我想连接到MySQL服务器以验证用户名是否与应用程序提供的密码哈希匹配。
当我添加基本上下面的代码:
conn = MySQLdb.connect (host = "192.168.1.12",
user = "<useraccount>",
passwd = "<Password>",
db = "<dbname>")
cursor = conn.cursor()
safe_username = MySQLdb.escape_string(XMLLoginMessage.username)
safe_pass_hash = MySQLdb.escape_string(XMLLoginMessage.pass_hash)
sql = "SELECT * FROM `mrad`.`users` WHERE `username` = '" + safe_username + "' AND `password` = '" + safe_pass_hash + "' LIMIT 1;"
cursor.execute(sql)
cursor.close()
conn.close()
需要执行HTTP请求最多拍摄4的时间 - 5秒!我相信这是在连接到MySql数据库服务器本身所需的时间内发生的。
我的问题是如何能加快这?我可以在全局范围声明MySQL连接,并通过创建一个新的游标在请求处理程序中访问它,或者由于Tornado的异步设计会遇到并发问题吗?
基本上,我怎么能没有承担一个MySQL服务器每个HTTP请求一个新的连接,所以只需要几分之一秒,而不是多秒来实现。
而且,请注意,SQL服务器实际上是同一台物理机器的龙卷风Web Server实例
更新
我只是进行了简单的MySQL查询通过探查,相同的代码下方。
调用'connections.py'init函数花费了4.944秒来单独执行。这看起来不正确,是吗?
更新2
我认为,随着一个连接(或者甚至是一个非常简单的DB康恩池数)运行将是速度不够快处理,我每个龙卷风Web服务器实例预期的吞吐量。
如果1000个客户端需要访问查询,典型的查询时间在数千秒之中,最不幸的客户端将只需要等待1秒钟来检索数据。
5秒可以与数据库连接相关,而不是实际查询,如果使用龙卷风,则可以在全局范围内连接到数据库,然后将db参数与请求一起传递。 – chuseuiti 2017-04-09 05:03:56