Tôi có một trò chơi trực tuyến theo lượt, với rất nhiều trò chơi chạy cùng một lúc. Tôi đang trong quá trình tối ưu hóa mã, vì cả tôi và máy chủ đều gặp sự cố ngày hôm nay.1,3 triệu truy vấn/Giờ. Bạn sẽ xây dựng các truy vấn như thế nào?
Đây là thiết lập:
Ngay bây giờ tôi có một bảng, "trận đấu" (70 lĩnh vực dữ liệu cho mỗi hàng Cấu trúc.), Mà theo dõi tất cả các trận đấu tích cực. Cứ sau 7 giây, iphone sẽ kết nối, tải xuống tất cả các trận đấu trong bảng "trận đấu" mà anh/cô ấy đang hoạt động và cập nhật giao diện người dùng trong iphone.
Điều này làm việc tuyệt vời cho đến khoảng 1.000 người đã tải xuống trò chơi và chơi. Máy chủ bị lỗi.
Vì vậy, để tối ưu hóa, tôi hình tôi có thể tạo một bảng mới có tên là "matches_needs_update". Bảng này có 2 hàng; tên và id. "Id" giống với "đối sánh" trong bảng "phù hợp". Khi một trận đấu được cập nhật, nó sẽ được đưa vào bảng này.
Bây giờ, thay vì tìm kiếm trong toàn bộ bảng "phù hợp", truy vấn chỉ kiểm tra xem trình phát có bất kỳ kết quả nào cần được cập nhật hay không và sau đó nhận các kết quả phù hợp đó từ bảng "kết quả phù hợp".
Câu hỏi của tôi là hai khía cạnh:
- Đây có phải là giải pháp tối ưu?
Nếu người chơi đang hoạt động, nói 10 trận đấu, có cách nào tốt để nhận 10 trận đấu đó từ bảng "trận đấu" cùng một lúc hay tôi cần vòng lặp for thực hiện 10 truy vấn, mỗi câu trả lời cho mỗi khớp:
"SELECT * FROM matches WHERE id =?"
Cảm ơn trước
Trong khi vấn đề là nghiêm trọng, đây là một trong những loại vấn đề tốt nhất bạn có thể có, nếu bạn nghĩ về nó. Việc bẻ khóa từ quá nhiều người dùng thực sự là loại lỗi tốt nhất. – Cyclone
Giải pháp sử dụng Thông báo đẩy có thể là cách tốt hơn để khắc phục sự cố hiệu suất. Bằng cách đó bạn sẽ không có nhiều kiểm tra lần lượt dư thừa –
Nó gần như âm thanh như 1 người có thể hoạt động trong nhiều trận đấu, và nhiều người có thể hoạt động trong 1 trận đấu? Chắc chắn bạn phải có 3 bàn? – DanRedux