2012-12-07 3 views
5

私は、Java Webアプリケーションを設計するチームの一員で、ユーザーはリレーショナルデータベースで結果を検索し、ブラウザで表形式で表示します。ユーザーは、チャート作成ツールなどを使用して、別のブラウザウィンドウで同じ結果セット(またはそれらの結果のサブセット)を後で表示するオプションもあります。つまり、後で同じ結果セットレコードを視覚化できるようにする必要があります(最大24時間まで)。データベースクエリ結果セットをキャッシュするための良いデザインパターンが必要です

システムでの検索はリソースを大量に消費するので、常識から外れているので、メモリ(RAMまたはディスク)から後で引き出すことができるように、各結果セットをキャッシュするクリーンな方法が必要です。 私たちはこのキャッシングを行う良いアプローチを探しています、他の人がこれまでにやっていたと思っていますが、そのようなことを最初から構築するのではなく、ベストプラクティスやフレームワークを使用する方が望ましいです。サーバーにはたくさんのRAMがありますが、システムを使用する人は何百人もいる可能性があるため、まずRAMに保存してからRAMがいっぱいになるとハードディスクにキャッシュする方法が必要になることがあります。

私はそれがJavaオブジェクトとして永続するのが最も理にかなっていると信じていますが、私はより良いアドバイスを受けています。ベンダーに中立的なアプローチが必要なので、データベースチームが後でベンダーを切り替えることを選択した場合、私たちは独自のソリューションに悩まされていません。ありがとう。

+3

ahhhテキストウォール。血まみれの目を防ぐために少なくともフォーマットしてください – thatidiotguy

+0

あなたの質問を書式設定して、できるだけ簡単かつポイントにすると、より良い結果が得られます。 –

+0

あなたの投稿を編集してもっと読みやすくしてください... –

答えて

1

これまで私はhttp://www.jboss.org/infinispan/を使っていました。メモリ、ディスク、またはデータベースにキャッシュすることができます。私はそれが大好きだと言っていないでしょう(構成は簡単ではなく、ドキュメンテーションは多少欠けています)。しかし、確かに動作し、積極的に維持されています。

1

ベンダーニュートラルであることは、アプリケーションにネイティブな抽象レイヤーを作成し、このレイヤーの背後で使用したいキャッシュサービスを差し込み、メインコードに同じ操作を公開するレイヤーを維持することです。

キャッシュする方法はたくさんあります。さまざまなNoSqlソリューションを使用してください。

  • Redis
  • Memcached
  • ほとんどの時間を、あなたのオブジェクトをシリアル化し、それはあなたのキャッシュ層に保持されます

    4

    私はあなたが探しているかもしれないと思いますテラコッタEhcacheです。これは、あなたが言及したすべてを行います。メモリ内のものをキャッシュしたり、ディスクにオーバーフローさせたり、MBまたはアイテム数で最大キャッシュサイズを指定したり、最後のアクセス時間またはエントリ時間に基づいて期限切れにすることができます。

    +0

    EhCacheはかなり甘いです。私の経験は「ただの仕事」でした。 –

    関連する問題