2012-04-28 8 views
5

私はマルチプレイヤーゲームを持っており、ますます多くのプレーヤーが歌っているようにいくつかの奇妙なエラーが発生し始めています。mysqlクエリキュー?

データベースには約150万件のクエリがありますが、以前は何の問題もなく、いくつかのクエリが完了する前に実行されていたクエリがあると思います。より多くの人々がサインアップします。

「sendTurn.php」と「removePlayer.php」の2つのメインクラスがあります。プレイヤーが長時間応答すると、彼は追い出されます。しかし、私は、プレーヤーが追い出されているのと同じように、プレイヤーが自分の番を回せば何が起こるのだろうと思いますか?

クエリはキューに入れられますが、各クラスでいくつかのクエリーが完了する必要があるため、たとえば「sendTurn.php」が途中で終了すると1-2クエリ)、他のクラス "removePlayer.php"がそのクエリの実行を開始するでしょうか?

この場合、何ができますか?

事前に感謝します。

編集:phpmyadminのと私はDebianのVPSサーバー上apace2使用

+0

使用しているAPIのどのような? mysql、mysqli、mysql-pdo? –

+0

これらのクエリをトランザクションにラップするのはどうですか? – DCoder

+0

返信ありがとうございます。私はdebian VPSサーバーでapace2を使用し、phpmyadminを使用しています – BlackMouse

答えて

3

これは技術的ではなく、アーキテクチャの問題の詳細ですので、それは、完全なアーキテクチャの見直しだろう真の解決策のように見えます1。この問題を完全に回避することは可能ですが、私には十分な情報がありません。ただし、の場合、機密処理の全範囲についてアクセスするたびに機密テーブルをロックすることができます。多くのプレイヤーが同じ機能に到達しようとするとパフォーマンスが低下しますが、少なくとも機能します。

な機能

*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