2012-04-28 46 views
5

Tôi có trò chơi nhiều người đã bắt đầu tạo ra một số lỗi lạ khi ngày càng có nhiều người chơi tham gia. Có khoảng 1,5 triệu truy vấn đến cơ sở dữ liệu/giờ và tôi nghĩ vấn đề là một số truy vấn được thực thi trước khi một số truy vấn khác hoàn thành, vì tôi không có bất kỳ vấn đề nào trước đây và tôi càng ngày càng nhiều nhiều người đăng ký hơn.hàng đợi truy vấn mysql?

Tôi có hai lớp chính: "sendTurn.php" và "removePlayer.php". Nếu một người chơi phải mất nhiều thời gian để trả lời, anh ta đã đá. Nhưng tôi đoán rằng vấn đề là những gì sẽ xảy ra nếu một người chơi đến lượt mình, cũng giống như anh ta bị đuổi ra ngoài?

Tôi đọc ở đâu đó rằng các truy vấn được đặt trong hàng đợi, nhưng vì nó yêu cầu một số truy vấn trong mỗi lớp để hoàn thành nó, có thể khi, ví dụ, "sendTurn.php" được nửa chừng thực hiện 1-2 truy vấn) rằng lớp khác "removePlayer.php" sẽ bắt đầu thực hiện truy vấn của nó?

Trong trường hợp này, tôi có thể làm gì?

Rất cám ơn trước!

Edit:

tôi sử dụng apace2 trên máy chủ debian VPS, với phpmyadmin

+0

Những loại API bạn đang sử dụng? mysql, mysqli, mysql-pdo? –

+0

Làm thế nào về gói những truy vấn đó trong một giao dịch? – DCoder

+0

cảm ơn bạn đã trả lời. Tôi sử dụng apace2 trên một máy chủ VPS debian, với phpmyadmin – BlackMouse

Trả lời

3

Nó trông giống như một giải pháp thực sự sẽ là một tổng quan kiến ​​trúc đầy đủ, vì đây là chi tiết của một câu hỏi kiến ​​trúc chứ không phải là một kỹ thuật một. Có thể bạn hoàn toàn có thể tránh được vấn đề này nhưng không có đủ thông tin để tôi sử dụng. Tuy nhiên, bạn có thể khóa các bảng nhạy cảm bất cứ khi nào chúng được truy cập trong toàn bộ quá trình nhạy cảm của chúng. Sẽ có một hit hiệu suất khi rất nhiều người chơi cố gắng để đạt được các chức năng tương tự, nhưng ít nhất nó sẽ làm việc.

Ví dụ cho một chức năng như vậy

*LOCK TABLE* 
Do queries 
Do queries 
Do queries 
Do queries 
*UNLOCK TABLE* 

MYSQL dụ: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

+0

Cảm ơn, tôi sẽ đọc nó. – BlackMouse