2

マルチプレイヤー iOS ゲーム (Android 向けビルド) のデータを処理するために PHP と MySQL を使用していますが、ゲームは成功しつつあります。トラフィックが多い時間帯に、約 3 回の通話があります。私の「move.php」ページの2番目。プレイヤーが移動してデータベースにデータを保存し、その後「完了」を返します。何も問題がなかったことを確認するためにこれが必要です。圧力が高い場合、「完了」するまでに約 3 ~ 5 秒かかり、それ以上かかります。現在の 10 倍のユーザーを獲得したいと思っていますが、これにより応答時間が非常に長くなるか、失敗し始めるのではないかと恐れています... 私の move.php ページには、約 5 つの異なる選択クエリ、4 つの更新があります。クエリと 2 つの挿入クエリ。この部分は最適化されていますが、通常の mysql と php を使用しています。

私は、この時点で何が良い習慣であるか、特に「完了」を送り返すために、これをより速くする方法をさまよっています。ユーザーがこれを経験しない限り、その後の長い実行時間は気にしません。mysqli、pro、ストアドプロシージャなどは私のために何かをしますか?

事前に回答と感謝を期待しています...

4

4 に答える 4

4

トラフィックを処理しているとき、キャッシング、キャッシング、さらにキャッシング...

基本的に、一方の端にはユーザー-マシンがあり、もう一方の端にはサーバー-ハードディスクがあるという架空のスケールを考える必要があります。したがって、データをできるだけユーザーエンドに近づける手法を見つけてください。サーバーのディスクにヒットする回数が減れば減るほど、Web サイトの速度と応答性が向上します。これには次のようなテクニックが含まれます -

  1. クライアント側のデータ ストレージ。
  2. サーバー側のキャッシュ
  3. サーバー側Web アクセラレータ
  4. データの取得が高速になるように、データに適切なインデックスを付けます。

より具体的なツールなどを提供できますが、それらはオンラインで簡単に見つけることができます(読むmemcachedなど)。一般的な考えに下線を付けました...

于 2013-01-11T09:39:53.313 に答える
3

MySQL クエリの数を考えると、それらを組み合わせることを検討します。たとえば、複数INSERTの の場合、同じ接続で実行できますか、またはそれぞれに対して異なるステートメントを発行しますか (データベースのロックとロック解除)?

また、クエリは時間に敏感ですか? または、結果をクライアントに送信してから、後で処理するためにクエリをジョブ キューに入れることはできますか?

それ以外は、既に提案されていることしか提案できません: コードのプロファイリング、可能な場所へのキャッシュなど。

于 2013-01-11T09:59:27.480 に答える
3

一般に、アプリケーションを高速化するには、ボトルネックを見つけることがすべてです。スクリプトのプロファイルを作成して、実行速度が遅い部分を確認してから、最適化してください。データベース クエリ、プログラム モジュール、Web サーバー要求など、さまざまなポイントで測定します。異なる負荷プロファイル (1 秒あたりの同時リクエスト数、ユーザーの総数など) でアプリケーションをプロファイリングすることを忘れないでください。

典型的な最適化は次のとおりです。

  • SQL クエリに使用EXPLAINして、インデックスが正しく使用されているかどうかを確認します。
  • 可能であれば、データベースから返される結果を制限します (より多くの WHERE 基準または LIMIT ステートメントを使用)。
  • 可能であれば、一部の結果をキャッシュします。
  • スケールアウト: 複数のサーバーとロード バランサーを使用し、レプリケートされた Mysql サーバーを使用します。

非推奨の mysql モジュールの代わりに PDO または mysqli を使用することは、パフォーマンスの問題にかかわらず良い考えです。

本当にすぐに「完了」を返したい場合は、Gearmanを調べることができます。バックグラウンドで SQL を処理できるようになります。ただし、作業負荷を監視する必要があります。クエリがキューに入れすぎると、SELECT の結果に現在のゲームの状態が反映されなくなります。

于 2013-01-11T09:37:24.397 に答える
1

これまでに得た優れた提案に加えて、 PHP Acceleratorsについても忘れないでください。実行時間を本当に短縮できます。

また、11 個のクエリは多くはありませんが、MySQL がそれぞれのクエリ実行計画に時間を費やしている場合、実際に合計することができます。したがって、Prepared Statements が可能である場合は、考慮する価値があります。

于 2013-01-11T09:44:35.543 に答える