我有一个多人游戏,随着越来越多的玩家被烧毁,这些游戏开始产生一些奇怪的错误。
数据库/小时大约有150万个查询,我认为问题是有些查询在其他查询完成之前就已经执行了,因为之前我没有遇到任何问题,而且越来越多的问题越来越多人们报名参加。
我有两个主要类:“sendTurn.php”和“removePlayer.php”。如果一名球员花了很长时间做出回应,他就会被踢出局。但是我猜这个问题是如果一个球员轮到他的话会发生什么,就像他被踢出去一样?
我在某处读到了查询被放入队列,但由于每个类需要几个查询才能完成,所以有可能在例如“sendTurn.php”中途完成(完成第一个1) -2查询)其他类“removePlayer.php”将开始执行其查询?
在这种情况下,我该怎么办?
编辑:
我在debian VPS服务器上使用apace2,使用phpmyadmin
答案 0 :(得分: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