Gần đây tôi đã khám phá khung web Tornado để phục vụ nhiều kết nối nhất quán bởi nhiều khách hàng khác nhau.Khung Web Tornado Xử lý kết nối Mysql
Tôi có trình xử lý yêu cầu về cơ bản có chuỗi được mã hóa RSA và giải mã nó. Văn bản được giải mã là một chuỗi XML được phân tích bằng trình xử lý tài liệu SAX mà tôi đã viết. Tất cả mọi thứ hoạt động hoàn toàn tốt đẹp và thời gian thực hiện (theo yêu cầu HTTP) là khoảng 100 mili giây (với giải mã và phân tích cú pháp).
XML chứa băm Tên người dùng và Mật khẩu của người dùng. Tôi muốn kết nối với máy chủ MySQL để xác minh rằng tên người dùng khớp với mật khẩu băm do ứng dụng cung cấp.
Khi tôi thêm về cơ bản đoạn mã sau:
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()
Thời gian cần thiết để thực hiện các yêu cầu HTTP bắn lên tới 4 - 5 giây! Tôi tin rằng điều này là phát sinh trong thời gian cần để kết nối với máy chủ cơ sở dữ liệu MySql chính nó.
Câu hỏi của tôi là làm cách nào để tăng tốc độ này? Tôi có thể khai báo kết nối MySQL trong phạm vi toàn cầu và truy cập nó trong trình xử lý yêu cầu bằng cách tạo một con trỏ mới, hay nó sẽ chạy vào các vấn đề đồng thời vì thiết kế không đồng bộ của Tornado?
Về cơ bản, làm cách nào tôi không phải chịu một kết nối mới tới máy chủ MySQL MỌI yêu cầu Http, vì vậy nó chỉ mất một phần nhỏ giây thay vì nhiều giây để triển khai.
Ngoài ra, xin lưu ý, máy chủ SQL là thực sự trên máy vật lý tương tự như trường hợp Tornado Web Server
Cập nhật
Tôi chỉ cần chạy một truy vấn MySQL đơn giản thông qua một hồ sơ, cùng mã dưới đây.
Cuộc gọi tới 'connections.py' init chức năng mất 4.944 giây để thực thi một mình. Điều đó có vẻ không đúng, phải không?
Cập nhật 2
Tôi nghĩ rằng chạy với một kết nối (hoặc thậm chí một vài với một hồ bơi conn DB rất đơn giản) sẽ đủ nhanh để xử lý các thông tôi hy vọng mỗi cơn lốc xoáy dụ máy chủ web.
Nếu 1.000 khách hàng cần truy cập truy vấn, thời gian truy vấn thông thường trong hàng nghìn giây, khách hàng không hài lòng nhất sẽ chỉ phải đợi một giây để truy xuất dữ liệu.
5 giây có thể liên quan đến kết nối cơ sở dữ liệu chứ không phải truy vấn thực, nếu bạn đang sử dụng lốc xoáy, bạn có thể thực hiện kết nối với db trên toàn cầu và sau đó chuyển tham số db với yêu cầu. – chuseuiti