9

Hibernate で 2 次キャッシュを使用するとパフォーマンスが向上するという記事をよく見かけますが、それを使用することの欠点についてはあまり触れていません。セカンダリ キャッシュを魔法のように扱いたくありません。ボタン。セカンダリ キャッシュを使用することの影響を認識できるように、セカンダリ キャッシュを使用することの欠点を説明できる人はいますか?

4

2 に答える 2

8

他の回答で引用されたポイントは有効なようです。ただし、私にとって、主な欠点は別のものです。

  1. パフォーマンスが低下します。はい、パフォーマンスを向上させるためにキャッシュを使用する必要はありません。Hibernate は、キャッシュを保存および更新するために余分な作業を行う必要があります。キャッシュされたエンティティが頻繁に変更され、頻繁にクエリを実行していない場合、キャッシュを有効にすると不要な余分な負担が増えるだけです。

  2. キャッシュの無効化。アプリケーションに、エンティティを更新しない方法で更新を実行するロジックがある場合 (たとえば、直接 SQL 更新、他のアプリケーションを介した更新、一括 HQL 更新 (最後のケースについてはよくわかりません :P ))、Hibernate はエンティティが変更されます。したがって、クエリを実行すると、更新前の画像が取得されます。

于 2013-01-18T03:34:22.537 に答える
5

短所:

  1. クラスター化された展開では、キャッシュを同期させる方法が必要になります。JGroups を利用する独自の無効化ルーチン (多大な労力 - 使用しないことをお勧めします) と Infinispan を使用して、単純な EhCache を使用しました。Infinispan ルートを使用する場合は、XA トランザクションを有効にする必要があります。これには、XA ドライバーとトランザクション マネージャーが必要です。アプリ サーバーによって提供されるか、Atomikos を使用する必要があります。
  2. エンティティの更新/削除がコレクションに適切に反映されないエッジ ケース (多対 1 または 1 対多のケースなど) があります。例: http://www.tikalk.com/java/forums/hibernate-second-level-cache-collection-eviction )
于 2013-01-18T00:57:21.180 に答える