2009-04-05 17 views
0

私はリアルタイムで複数のユーザーインタラクティブ機能を含むアプリケーションを開発しています。基本的には、各ユーザーからサーバーへのAJAX POST/GETリクエストが多数含まれており、データベースの読み書きに変換されます。サーバーから返されたリアルタイムの結果は、クライアント側のフロントエンドを更新するために使用されます。データベースとPOSTリクエストのパフォーマンスを最適化するためのヒント

私は最適化が非常にトリッキーで特殊な領域であることを知っていますが、ここでは最高の速度を得るためにどのようなアドバイスをお願いしますか?スピードは重要ですが、現在のところPOSTリクエストの一部は20-30秒。私はそれを最適化について考えている

一つの方法は、クラブのPOSTリクエストにあり、代わりに個々の要求を焼成する、グループ8-10としてサーバーに送信します。私は現在、データベース側でキャッシュを使用していないし、それが何であるか、そしてこの場合に有益かどうかについてあまり知識がない。

また、AJAX POSTを行うと、要求は、速度の点で同じオーバーヘッドが発生GET!

答えて

1

よりもむしろ連続的(方法まれにデータの変更に基づいて、有効期限付き)データベース、キャッシュ頻繁に使用されるデータ項目を打ちます。

あなたには、いくつかのデータをクライアント側にキャッシュすることで、サーバを使用して通信を減らすことはできますか?

GETの目的は、 がGET情報を含意することと同じ意味です。 の情報を ページに表示する際に使用することを目的としたものです。ブラウザはGET要求から の結果をキャッシュし、同じGET 要求が再度行われた場合は、 要求全体を再実行するのではなく、キャッシュされた結果を に表示します。これは であり、ブラウザ処理の欠陥ではありません の場合には、 のコールを使用すると、より多くのGETコールを行うように、意図的に を処理するように設計されています。 GET呼び出しが のページに表示するデータを取得する このような呼び出しによってサーバー上のデータが変更される可能性はありません。 同じデータを再要求する場合は と同じ結果が得られるはずです。

POSTメソッドは サーバーの の情報を更新するために使用されます。このようなコールは サーバ上に格納されたデータを変更する に期待されるとの結果が非常によく 初期値から1 互いに完全に異なっていてもよい 二つの同一のPOST呼び出しから返され 第POSTコールがされる前 最初の呼び出しは、少なくとも これらの値の一部を更新してしまうので、 は、最初の呼び出し前の初期値 をdifferentfrom。したがって、POSTコールは、 を、以前の応答のキャッシュされたコピー を保持するのではなく、常にサーバから応答 を取得します。

Ref

0

あなたが使用する最適化の技は、一般的に、通常のウェブサイトで使用するのと同じテクニックで、ターンアラウンドタイムが速いだけです。あなたがやってに見ることができますいくつかのものがあります:ユーザー

  • ミッチ小麦の通りの間にキャッシュ層を使用することにより、ロードされているの高い確率を持っている

    • プリフェッチGETリクエスト。技術プラットフォームに応じて、memcacheを調べることができます。これはかなり一般的です。すべてのライブラリがあります。
    • 非常に高い頻度で照会される非正規化データを見てください。読み込みが書き込みよりも一般的であると仮定すると、作業負荷をデータアクセスの書き込み部分に移動すると、パフォーマンスが大幅に向上するはずです(結合によるデータベース読み込みを追加するのではなく)
    • 書き込みに優先順位を付けるために遅延挿入を使用しますデータベースサーバーでバッチ処理を最適化させる
    • テーブルにインテリジェントなインデックスがあることを確認し、提供しているメリットを把握します。書き込み:読み取り率が高いためにインデックスを頻繁に再構築する場合は、クエリをスケールバックすることをお勧めします。
    • より一般的なクエリでデータを取得し、データをフィルタリングして応用。 MySQL(たとえば)は、特定のクエリと一致する非常に特定のクエリキャッシュを使用します。たとえx%を表示するだけであっても、与えられた集合に対してすべての結果を取り出すことは理にかなっています。
    • 書き込みの場合、システム内で可能な場合は、データベースへの非同期クエリの実行を見てください。データ同期ではには瞬間的にが表示されません。ほとんどの場合、そのように表示する必要があります(ほとんどの場合)
    • ディスク/メモリ上の共通ページを完全にフォーマットした状態でキャッシュします。すべてでそれら

    すべての多くの処理では、あなたができることのは(と彼らは一般的に、より一口サイズの規模で、一般的な開発プラクティスに降りてくる)たくさんあります。

  • 0

    共通チューニングのトリックは次のようになります。 - より多くのインデックス を使う - より少ないインデックス を使用する - ファイルシステム、データベース、アプリケーション、またはコンテンツ に多かれ少なかれキャッシュを使用する - より多くの帯域幅以上のCPUパワーまたは上のより多くのメモリを提供します任意のコンポーネントのいずれか - 任意の種類の通信におけるオーバーヘッドを最小限に抑えます。

    もちろん、別の方法があります: 0テストのセットを開発することをお勧めします。
    1アプリケーションの「スピード」を測定します。
    2がperformane問題の原因を特定
    3になるように持ってどれだけ速く決定:
    典型的な問題は、次のとおり、ネットワークスループット、ファイルI/O、待ち時間、問題をロックする、メモリ不足、CPU 4が問題
    を修正 5は、アプリをプロファイリングしようとしたことがあり1

    0

    への復帰
    7それは実際に速く
    6(上記したがってテスト)、それが正しい動作することを確認してくださいであることを確認してください?

    ないあなたが(もしあれば)を使用しているが、率直に言って、あなたの質問から、私はあなただけのこの眼球と物事が減速している場所を把握するためにはまだ技術的なスキルを持っている疑いどのような枠組みを確認してください。

    が露骨に言えば、あなたが本当に問題が何であるかを理解していないので、あなたの問題を解決しようとする複雑な方法をいじりすべきではありません。そうすることで、それを悪化させる可能性は高くなります。私はあなたが推薦する何

    は時間がすべてのステップです。ほとんどの場合、あなたはどちらか

    1. あなたは、1つのまたは2つの非常に長い実行されているビットまたは
    2. あなたがあるため、N + 1つの誤差のクエリのshittonなど
    を実行しているを持っていることがわかります

    あなたは間違って何が起こっているのか見つけた場合、それを修正します。どのようにわからない場合は、再度投稿してください。 ;-)

    関連する問題