我最近一直在探索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