順序付け/プロパティを変更できるページ付けされた検索結果をキャッシュするためのベストプラクティスは何ですか?
たとえば、私のアプリケーションで、誰かが最後の20件のディスカッションスレッド(10,000件中)を確認したいとします。 servlet
経由でデータベースにリクエストが送信され、最初の20レコードがディスカッションスレッドテーブルからXML/JSONとしてフェッチされます。次に次の20を確認したい場合は、結果の次のページに移動し、次のロットを取得するための別のリクエストを発行します(制限とオフセット= 20など)。
サーバーの負荷とクライアントの待機を減らすために、結果の前のページをキャッシュしたいと思います。ただし、2つの質問があります。
必要なのは、ページを定義するすべてのパラメーターのラッパー(たとえば、pageNumber
、pageSize
、sortType
、totalCount
など)のラッパーです。このDataRequest
オブジェクトをキャッシュメカニズムのキーとして使用します。この時点から、キャッシュを処理するためのいくつかのオプションがあります。
最初の2つは、ある間隔で、またはイベントに基づいてトリガーするスケジューラメカニズムを含む場合があります。データアクセスポイントが1つしかない場合、最後の方が簡単な場合があります。
最後に、@ DanPichelmanが述べたように、それはすぐに過度に複雑なアルゴリズムになり、メリットを上回る可能性があるため、パフォーマンスの向上がアルゴリズムの複雑さを正当化することを確認してください。
私はおそらくこれを次のように処理します:
ちょっと考えてください-サーバーの呼び出しで、通常のパラメーターと、現在キャッシュされている以前に表示されたデータのページを表すMD5ハッシュの配列を渡します。
Return呼び出しには、新しい現在のページのすべての通常のデータと、以前に表示された古いページの更新が含まれます。古いハッシュをキーとして使用できます。
最初に多くのパフォーマンスとタイミングテストをお勧めします。クライアント側のコードは、データの各ページでサーバーにアクセスするだけの場合よりもはるかに複雑になります。余分な複雑さが、意味のある改善をもたらすことを確認してください。