2012-04-28 60 views
5

我有一款多人游戏,随着越来越多玩家的兴趣开始产生一些奇怪的错误。mysql查询队列?

对于数据库/小时,大约有150万次查询,而且我认为问题在于有些查询在其他查询完成之前得到执行,因为之前没有任何问题,而且越来越多更多人注册。

我有两个主要类:“sendTurn.php”和“removePlayer.php”。如果一名球员需要很长的时间来回应,他会被踢出。但是我猜这个问题是如果一个球员轮到他出现什么情况,就像他被踢出去一样?

我在某处读取查询被放入队列中,但因为它需要几个querys在每个类中完成它,是否有可能,例如,“sendTurn.php”中途完成(完成第一个1-2查询)其他类“removePlayer.php”将开始执行其查询?

在这种情况下,我该怎么办?

非常感谢提前!

编辑:

我用apace2一个Debian VPS服务器上,与phpMyAdmin

+0

什么样的API您使用的是? mysql,mysqli,mysql-pdo? – 2012-04-28 11:47:13

+0

如何在事务中包装这些查询? – DCoder 2012-04-28 11:49:19

+0

感谢您的回复。我在debian VPS服务器上使用apace2,使用phpmyadmin – BlackMouse 2012-04-28 11:49:30

回答

3

它看起来像一个真正的解决方案是一个完整的架构审查,因为这更多的是一个架构问题,而不是技术一。你可以完全避免这个问题,但是没有足够的信息供我使用。但是,只要您的敏感进程完全访问敏感表,您可以锁定敏感表。当很多玩家试图达到相同的功能时,会有性能受到影响,但至少它会起作用。

例如,对于这样的功能

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

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

+0

谢谢,我将对其进行了解。 – BlackMouse 2012-04-28 12:45:45