저는 최근에 많은 다른 클라이언트에 의해 일관된 연결을 제공하기 위해 Tornado 웹 프레임 워크를 탐색 해 왔습니다.Tornado Web Framework Mysql 연결 처리
기본적으로 RSA 암호화 문자열을 가져 와서 해독하는 요청 처리기가 있습니다. 해독 된 텍스트는 내가 작성한 SAX 문서 처리기로 구문 분석되는 XML 문자열입니다. 모든 것이 완벽하게 작동하고 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 연결을 선언하고 새 커서를 만들어 요청 처리기에서 액세스 할 수 있습니까? 아니면 토네이도의 비동기 설계로 인해 동시성 문제가 발생합니까?
기본적으로 모든 HTTP 요청에 대해 MySQL 서버에 새로 연결할 필요가 없으므로 구현하는 데 몇 초가 걸리지 않습니다. 또한
는 SQL 서버는 그냥 아래에서, 프로파일 러를 통해 동일한 코드를 간단한 MySQL의 쿼리를 실행토네이도 웹 서버 인스턴스
업데이트와 동일한 물리적 시스템에 실제로주의하시기 바랍니다.
'connections.py'init 함수 호출은 4.944 초가 걸렸습니다. 그게 옳은 것 같지 않니?
업데이트 2
나는 하나 개의 연결 (또는 아주 간단한 DB의 CONN 풀 심지어 몇)와 함께 실행하는 것은 내가 토네이도 웹 서버 인스턴스에 기대하고있어 처리량을 처리 할 수있을만큼 빠르게 될 것이라고 생각합니다.
1000 명의 클라이언트가 쿼리에 액세스해야하는 경우 일반적인 쿼리 시간은 수천 초입니다. 불충분 한 클라이언트는 데이터를 검색하기 위해 1 초를 기다려야합니다.
5 초는 실제 쿼리가 아닌 데이터베이스 연결과 관련 될 수 있습니다. 토네이도를 사용하는 경우 db와의 연결을 전체적으로 수행 한 다음 요청과 함께 db 매개 변수를 전달할 수 있습니다. – chuseuiti