4

Java Web アプリケーションのキャッシング ソリューションを探しています。Oracle db インスタンスと、db に対してリモートである 2 ~ 3 個のインスタンスがあります。データベースの応答時間を受け入れることができないため、データをアプリにローカルにキャッシュしたいと考えています。私たちのデータセットは平均的なサイズ (テーブルごとに数千行) であり、アプリケーションから手動で変更されます (それほど頻繁ではありません) (データベースへの直接アクセスはありません)。

そこで私たちが考えていたのは、必要なすべてのデータをローカルに保持できるソリューションです。データベースから取得してキャッシュに書き直すデータの量を減らしたいと考えています。

したがって、たとえば、1 つのエンティティが変更された場合、そのテーブルでキャッシュされたすべてのクエリを無効にするのではなく、キャッシュされたデータからクエリをローカルで実行できるように、ローカルでキャッシュされたクエリの結果セットを変更できるようにする必要があります。キャッシュは変更を複製する必要があります\データベースからアプリケーションの他のインスタンスによって変更されたデータを取得します.

Hibernate の第 2 レベルのキャッシュとして EhCache を検討してきましたが、テーブルを変更すると、特定のテーブルに対してキャッシュされたすべてのクエリが無効になります。Hibernate Services を簡単に調べてみましたが、必要に応じて休止状態の第 2 レベル キャッシュのデフォルト動作をオーバーライドできるかどうかはまだわかりません。

他に使用できるソリューションはありますか?

編集データへの非常に高速なアクセスが必要です。事実上、私たちが探しているのは、Quaryable キャッシュです。

4

3 に答える 3

3

JBoss キャッシュを確認しましたか? クエリのエビクション ポリシーを個別に定義でき、クラスター ノード間での同期も非常に簡単です。必要に応じて、参考になるかどうか、私の経験をまとめた記事を読んでください。

http://dinukaroshan.blogspot.com/2009/10/jboss-caching-integration.html

于 2012-11-15T12:15:55.930 に答える
2

EhCache を使用していて、クラスター内に複数のアプリケーションがある場合は、データ キャッシュのレプリケーションにメカニズム (JMS、JGroups、...) を使用する必要があります。

注意しなければならないことの 1 つは、Java で実行されていない別のアプリケーションがある場合、アプリには通知されないということです。JGroups は Java でのみ使用可能であり、Java 以外のアプリはキャッシュされたエンティティを無効にすることはできません。EhCache/Jgroups サポートにより、1 つの構成ファイルでレプリケーションをセットアップできます (追加のコードは必要ありません!)

EhCache の「コピーによる更新」機能を探しているようです。EhCache の構成の可能性を 1 つ挙げてみましょう。

コピーと無効化による更新

コピーによる更新: データはすべてのノードに送信されます
長所: キャッシュの完全な再読み込みを回避します
短所: キャッシュされたデータの TTL が低い場合、ノード間で一貫性のないデータが発生する可能性があり、役に立ちません

無効化による更新: すべてのノードに送信される無効化の通知。データが既にキャッシュされている場合、ノードはキャッシュされたデータ クエリをデータベースから削除します。
長所: データの一貫性とネットワーク トラフィックの軽量化
短所: 多くのデータベース クエリが発生し、同時に大量のデータが必要になる可能性があります


非同期と同期

非同期
長所: 迅速な返信とデータ転送
短所: UDP...

同期
長所: データの整合性
短所: パフォーマンス...


正しい決定を下すのに役立つことを願っています。

于 2012-11-15T12:31:14.493 に答える
0

キャッシュされたクエリ結果の無効化は、キャッシュが制御するものではありませんが、Hibernate が QueryCache を処理する方法です...そのコードを変更する以外に、どのようにそれを行うかわかりません。その上、率直に言って、その問題に対するより良い「すべてに適した」解決策はないと思います。

したがって、クエリ結果の非常に特殊なキャッシュが必要な場合は、自分で実装する必要があると思います。

また、より高い一貫性の保証が必要な場合は、複製されたキャッシュではなく、クラスター化されたキャッシュを使用することをお勧めします...

于 2012-11-22T18:17:24.040 に答える