私はhttp://www.joemajewski.com/fortressにある「Fortress」というタイトルのこのゲームに取り組んでいます。とにかく、これはブラウザベースのロールプレイングゲームの1つであり、プレイヤーは軍隊を編成し、統計をアップグレードしてリーダーボードで上位にランクインします。
30分ごとにcronジョブが実行され、いくつかの更新が行われます。ゲームの各プレイヤーをループし(参加する人が増えるにつれて自然に上昇し続けます)、特定の統計を更新します。それは皆に1ターン余分に与え、彼らの収入、食物、木、銅、鉄などに基づいて彼らに金を与えます、そしてそれは彼らのランキングを更新します。
それはすべてマンボジャンボです、私は知っています、しかし重要なのは各プレイヤーが彼ら自身のアップデートクエリを持っているということです。私はたった3人のメンバーでスクリプトの時間を計りました:
mysql_query()関数を使用した実行時間は更新のためにコメントアウトされています:〜3.5ミリ秒
mysql_query()関数が正しく機能している実行時間:〜14ミリ秒
ゲームに100人以上の登録メンバーがいると、cronジョブが非常に遅くなるのは明らかに更新クエリです。ゲーム開始から2週間以内に100人のアクティブプレイヤーを獲得したいと思っていますが、多くのプレイヤーが複数のアカウントを作成しているため、2週間後には少なくとも200人のメンバーがいると思います。200の更新クエリに加えて、メンバーの並べ替えとランキングの計算に余分な時間がかかるため、cronジョブの実行には2秒以上かかる可能性があります。
あなたへの私の質問。このようなことをするためのより速い方法はありますか?ループの前後にそれぞれ「STARTTRANSACTION」クエリと「COMMIT」クエリを追加しようとしましたが、3つのメンバーだけでは速度を測定するのは困難です。トランザクションによってスクリプトは良くなりますか、それとも悪くなりますか?これを回避する他の方法はありますか?どんな助けでもいただければ幸いです。
お時間を割いていただき、誠にありがとうございました。