2009-10-12 15 views
12

高価な検索結果をASP.NETシステムにキャッシュするには、どのような設計が適していますか?ASP.NETアプリケーションでの検索結果のキャッシュアーキテクチャ

私たちの独自の複雑なインフラストラクチャを発明する必要のないアイデアは歓迎されます。

  • 各検索結果を生成することができ、各検索は(5-15秒を実行するために、比較的高価とtimeconsumingゼロから数百結果レコード
  • に含まれます。ここでは

    は、問題に関連するいくつかの一般的な要件であります

  • ユーザーが情報の過負荷を避けるために結果をページングする必要があります。
  • 返された結果内で並べ替え、フィルタリングおよび検索が可能であることが期待されています
  • ユーザーがページ
  • ユーザーの任意の数に迅速
  • ユーザーは、(チェックボックスを経由して)複数の項目を選択できるように期待する結果の検索にページを切り替えることができるように期待した検索がいったん比較的てきぱきとパフォーマンスを期待並べ替え、効率的なページネーションを容易にするために、ポストバックまたはAjaxのパネルを使用し、(セッションまたはアプリケーションのキャッシュ内)サーバー上の

    1.キャッシュ:私は、どのようにキャッシュを実装するためのいくつかの可能なオプションを参照してください

を終えました、フィルターng、および検索。 PROS

  • CONS ASP.NETインフラストラクチャから実装が簡単で、まともなサポート:サーバ上で非常におしゃべり、メモリが集中的には、データが必要以上に長くキャッシュされます。 (上記のように)サーバーで負荷分散プラクティス

2.キャッシュを禁止しますが、サーバ上のメモリの圧力を減らすためにある程度の期間後にメモリの外に移動されているシリアライズ構造体を使用して

  • PROS:サーバーメモリの効率的な使用。ロードバランシングを使用してスケールアウトする能力。
  • CONS:.NETインフラストラクチャからの限定サポート。データ構造が変化すると脆弱になる可能性があります。データベースに負荷がかかります。 (JSONまたはXMLシリアル化を使用して)クライアント上ではるかに複雑

3.キャッシュは、ソート、フィルタをページ付けするために、クライアント側のJavaScriptを使用して、結果を選択します。

  • PROS:ユーザーエクスペリエンスは、 "リッチクライアント" レベルに近づくことができます。ほとんどのブラウザはJSON/XMLをネイティブに処理できます。操作のためのライブラリがあります(例:jQuery)
  • CONS:初期リクエストにはダウンロードに時間がかかることがあります。クライアントマシン上でのメモリ占有量の大幅な増加データの圧縮/符号化表現を使用して、クライアント上の

4.キャッシュを実装するために、いくつかのレベルで手作りJavascriptを必要とします - 、ページを切り替え、ソート、フィルタリング、および検索するときに復号化するためにサーバーにコールバック。

  • PROS:サーバーに最小化メモリへの影響;クライアントがそれを必要とする限り、州を存続させることができます。 JSON/XMLでクライアント上のメモリ使用量を少し改善しました
  • CONS:クライアント/サーバー間で大きなデータセットが移動しました。 JSON/XMLを使用した純粋なクライアントサイドキャッシングと比較してパフォーマンスが低下します(ネットワークI/Oによる)。実装がはるかに複雑 - ... .NET /ブラウザ

5.私は考えられていないいくつかの代替キャッシュスキームからの限定的なサポートを#1の

+1

提案:「検索結果のキャッシュ」というオリジナルのタイトルでグーグルをしてください。あなたのシナリオでのキャッシングだけを見ることはあなた自身のものです。そこにいて、それをしてください。それは検索では難しいです。言ってるだけ。 – jro

+1

5-15秒は、DBクエリの観点から長い長い時間です。おそらく、DBクエリ(「外部結合」ではなく「内部結合」を使用し、「どこで」フィルタではなく「内部結合」を使用するか)を改善することに少なくともある程度努力する必要があります。フルテキストインデックス作成の使用も検討してください。 –

答えて