Bạn đang gặp khó khăn với việc thăm dò ý kiến với ngăn xếp công nghệ hiện tại của mình. MySQL không có bất kỳ cách tốt nào để gửi thông báo cho bạn rằng có một cái gì đó mới để xem.
(Bạn có thể cân nhắc thêm một hệ thống con xếp hàng tin nhắn, chẳng hạn như RabbitMQ, nhưng điều đó sẽ yêu cầu một sự thay đổi lớn đối với cấu trúc ứng dụng của bạn).
Một số hướng dẫn để xử lý việc bỏ phiếu với chi phí ít nhất có thể.
-
Đặt kỳ vọng của người dùng ở độ trễ tin nhắn vài giây thay vì mili giây.
-
Truy vấn thường xuyên nếu cần để đáp ứng mong đợi về độ trễ.
-
Tránh truy vấn nhiều dữ liệu với mỗi truy vấn. Làm thế nào bạn có thể làm điều đó?
một. Lưu dấu thời gian gần đây nhất bất cứ khi nào bạn chạy truy vấn
b. Không sử dụng
SELECT *
. Thay vào đó, hãy cung cấp tên của các cột bạn thực sự cần. Điều này cho phép trình tối ưu hóa của MySQL giúp cắt giảm chi phí cho các truy vấn của bạn.c. Thực hiện các truy vấn của bạn
SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
vì vậy bạn chỉ nhận được các mục mới từ bàn của bạn, theo thứ tự. Nếu hệ thống của bạn không bận lắm, các CHỌN này thường sẽ không trả về hàng nào. Điều đó tốt.d. Đảm bảo rằng bạn có một chỉ mục nhiều cột trên dấu thời gian và các cột khác trong câu lệnh SELECT của bạn. Đây được gọi là chỉ mục bao trùm .
e. Ngay sau khi bạn mở kết nối với MySQL, hãy phát hành câu lệnh SQL này. Nó cho phép MySQL tìm nạp dữ liệu của bạn mà không gây tranh cãi với các máy khách MySQL khác khi chèn các hàng vào bảng.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Nếu bạn đang thực hiện việc này với AJAX từ trình duyệt của người dùng, bạn muốn đưa dấu thời gian mới nhất vào các yêu cầu AJAX để bạn có thể cung cấp các mục mới cần thiết cho trình duyệt của mỗi người dùng.