2009-05-26 1 views
2

私は現在、キャッシュ戦略について考えており、より重要なことはキャッシュ内のデータの重複を避けることです。私の照会は、言語にとらわれないものですが、非常にプログラミングに関連しています。ページング/フィルタリングされたデータによるキャッシュ戦略

私の質問は、ページングまたはフィルタリングされたデータの効率的なキャッシュに関するものですが、それ以上の分散キャッシュです。後者は、memcachedに、さらに具体的には.NETポートにすることに決めました。私はNCacheの形で別の商用オプションを見たことがありますが、memcachedは私には完全に受け入れられるようです。そして、facebook、myspaceなどには明らかに使用されています...

私のクエリは、キャッシュ内のオブジェクトと、ページングされたデータを参照することもできます。私が100個のアイテムを持っていて、それらをページすると、キャッシュ内に製品1-10のIDをキャッシュし、それぞれの製品を別々にキャッシュすることができます。私がどこに降順で項目を並べ替えるかを選択すると、項目1-10は異なる製品になりますので、ページデータ/ソート/フィルタリングが変更されるたびに実際のオブジェクトを保存するのではなく、オブジェクトのIDを保存して、それらのうちのいくつかがキャッシュに存在しないか無効である場合に、データベース内でトラバクショナルルックアップを実行します。

私の最初のアイデアはキャッシュキーの場合です。

paged_<pageNumber><pageSize><sort><sortDirection>[<filter>] 

私は、いずれかが、そのようなページングデータなどのデータのようなパターンのキャッシングに関するstratiesに関するあらゆるパターンやアイデアを知っていれば私の質問は、最終的には「paged_」で始まるそのいずれかをキャッシュキーを反復処理し、削除しますオブジェクトが複数回キャッシュされないようにします。

memcachedはネイティブコードであり、上記の方法でキャッシュをクリアするのに問題はありませんが、キャッシュ内のアイテムが多くなるほど時間がかかることは明らかです。現在誰かが採用しているこの種の問題に対して、誰かが何らかの解決策や理論を知っていれば、私は興味があります。私は確信しているだろう。お時間

TIA

アンドリュー私は一度試してみました

+0

ページは動的ですか、各ページのデータは常に変化していますか、それともユーザーのクエリに基づいていますか?アプリケーションはすでに書き込まれていて遅すぎるため、キャッシュを使用する必要がありますか? 「時期尚早な最適化はすべての悪の根源です」 – Gandalf

+0

ユーザーのクエリにキャッシュされていない、あらかじめ定義されたオプションのセットでデータが変更されます。アプリケーションが作成されています。これは時期尚早の最適化ではなく、計画を立てることは失敗する予定です;-) " –

+1

計画は問題ありませんが、私はアプリケーションを書いて(あなたの頭の中でキャッシュを維持して)テストします。高速ではない場合は、Spring AOPのようなものをキャッシュに追加します。アプリケーションのコードにキャッシュロジックを埋め込むのではなく、これは、実際のコード[またはユースケース]を見ることができ、キャッシングが最も有益な場所を示唆するため、質問を簡単に答えることができます。 – Gandalf

答えて

0

いただきありがとうございます、私が何を考え、同様のキャッシュ戦略であり、それは扱いにくい見つけました。最終的には、ページを構成するオブジェクトをキャッシュして、すべての要求に対してページを生成するだけでした。ページを構築するための10のキャッシュヒットは、(うまくいけば)サブ秒の応答時間、あなたのサービスのユーザーにかなり瞬間になるだろう。

ページ全体をキャッシュする必要がある場合(結果セットとして考える)、ユーザーリクエストをハッシュで実行し、それをキャッシュキーとして使用できます。具体的な例やコードで視覚化するのは難しい問題です(少なくとも私にとって)。

関連する問題