문제

나는 최근에 많은 다른 클라이언트들에 의해 많은 일관된 연결을 제공하기 위해 Tornado 웹 프레임 워크를 탐색했습니다.

기본적으로 RSA 암호화 문자열을 가져 와서 해독하는 요청 핸들러가 있습니다. 해독 된 텍스트는 내가 작성한 색소폰 문서 핸들러에 의해 구문 분석되는 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 서버에 대한 새로운 연결을 초래할 필요가 없으므로 구현하는 데 몇 초가 아닌 1 초만 걸립니다.

또한 SQL Server는 실제로 Tornado Web Server 인스턴스와 동일한 실제 시스템에 있습니다.

업데이트

아래의 동일한 코드 인 프로파일 러를 통해 간단한 MySQL 쿼리를 실행했습니다.

'Connections.py'에 대한 호출 이니 기능은 단독으로 실행하는 데 4.944 초가 걸렸습니다. 옳지 않은 것 같아요?

업데이트 2

하나의 연결 (또는 매우 간단한 DB Conn Pool이있는 몇 가지)으로 실행하면 토네이도 웹 서버 인스턴스 당 기대치를 처리 할 수있을 정도로 빠릅니다.

1,000 명의 클라이언트가 쿼리에 액세스 해야하는 경우, 일반적인 쿼리 시간은 수천 초 안에있는 경우 가장 운이 좋은 클라이언트는 데이터를 검색하기 위해 1 초만 기다려야합니다.

도움이 되었습니까?

해결책

고려하다 sqlalchemy, DBAPI에 대한 더 좋은 추상화를 제공하고 연결 풀링 등을 제공합니다 (ORM을 행복하게 무시하고 SQL-Toolkit을 사용할 수 있습니다).

(또한 비동기 요청 핸들러에서 차단 데이터베이스 호출을하지 않으십니까?)

다른 팁

SQL 연결에 5 초가 걸리지 않아야합니다. 쿼리를 발행하지 말고 성능이 향상되는지 확인하십시오.

MySQLDB 모듈에는 "1"의 스레드 안전성이 있습니다. 이는 모듈이 스레드 안전이지만 스레드간에 연결을 공유 할 수는 없습니다. 연결 풀을 대안으로 구현할 수 있습니다.

마지막으로, DB-API에는 쿼리를 수동으로 연결하고 이스케이프 매개 변수를 사용하지 않아도되는 쿼리에 대한 매개 변수 교체 양식이 있습니다.

cur.execute("SELECT * FROM blach WHERE x = ? AND y = ?", (x,y))

기본 처리기에서 선언하면 응용 프로그램 당 한 번 호출됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top