3

Q1: このベンダーだけがクラスターで Hibernate L2 キャッシュをサポートしているというのは正しいですか?

  • Hibernate の Terracotta (商用)
  • SwarmCache (2003 年以降はリリースされていません)
  • JBoss キャッシュ 1.x
  • JBoss キャッシュ 2

Q2: Hibernate L2 キャッシュに代わるものはありますか? (おそらくDBキャッシング?)

4

4 に答える 4

10

Q1. EhCache は、分散型の Hibernate L2 キャッシュとして非常にうまく機能します。これをプロジェクトに使用しています。


Q2. 複数のキャッシュが可能です。

  • すべてのデータベースはすでに内部で大量のキャッシュを行っているため、この部分について心配する必要はありません。

ただし、データベース キャッシュの問題は、それが物理的にデータベース サーバー上にあるため、各クエリにネットワーク呼び出し (レイテンシ、帯域幅など) が含まれることです。これが、アプリケーション サーバー上のキャッシュの要点です。


  • Hibernate L2 キャッシュにはいくつかの仕様があります。
    • 操作が非常に簡単 (コードなし、構成が少ない)
    • 概念的にはエンティティ レベルで (これは非常に粒度が細かく、データベース リクエストを減らすために、より大きな粒度をキャッシュする必要がある場合があります)。
    • ID またはコレクションで動作します (たとえば、クエリ結果のキャッシュは、一般的なケースで使用できるようにすることが不可能であるため、デフォルトで無効になっています)。

  • Hibernate L2 が不適切な場合、同じ EhCache ライブラリを使用してデータをキャッシュします (これは正確にはエンティティではありません)。ユースケースの例:
    • テーブルが大きい (レコードの長さと数)場合、メモリの使用量によってテーブルを完全にキャッシュすることはできませんが、すべてのレコードに対して 3 つのフィールドだけをキャッシュすることは問題ありません。これらのフィールドは頻繁にアクセスされるか、不変である可能性があります...
    • キャッシュへの多数の読み取りアクセスがあり、それぞれが(L2 キャッシュ上で)計算をトリガーする場合、エンティティが与えられます: 計算結果はキャッシュに格納できます。(計算には他のテーブルからの詳細が必要ですが、詳細は最終結果で使用されないため、キャッシュにはこれらの詳細が保存されない典型的な例)
    • テーブル内のエンティティがカテゴリによって論理的にグループ化され一度に 1 つのエンティティになる通常の L2 キャッシュ ポリシーではなく、一度に 1 つのカテゴリをリクエストしてキャッシュしたい場合。

分散コンテキストでは、これは多くの場合、エンティティの 1 つが変更されたときにカテゴリを無効にすることになります。キャッシュはリージョン全体または特定のオブジェクトを無効にしますが、その間にループする必要があり、パフォーマンスが低下します)

そして他の人は確かに...

したがって、このケースはデータベースと密接に関連していません。通常、Hibernate エンティティは保存されません。私たちはそれを (データ アクセスや Daos ではなく) ビジネス層に配置し、ビジネス コードで直接利用できるようにします。私たちにとって、これは透過的なキャッシュではなく、操作を行ったり値を配信したりする明示的なビジネス サービス (このキャッシュを担当し、データが存在しない場合はキャッシュをロードし、必要に応じて無効化する) の呼び出しであることに注意してください。

このキャッシュの楽しいスレッドの問題: このキャッシュは数百の Web スレッドによってアクセスされるため、スレッドセーフである必要があります。スレッド セーフな値が呼び出しごとに不変または複製される理由はおそらくご存じでしょう (これは多くの場合、パフォーマンスの問題です)。そのため、すべてのビジネス キャッシュは不変オブジェクトを使用しており、パフォーマンスは優れています。

于 2009-08-28T10:56:29.033 に答える
2

[Infinispan(JBoss Cacheの進化)を第2レベルのキャッシュプロバイダーとして使用することもできます!] [1]

[1]: http: //infinispan.blogspot.com/2009/10/infinispan-based-hibernate-cache.htmlを参照してください

于 2009-10-26T16:28:40.963 に答える
1

EhCache には分散モードがありますが、それが Hibernate でサポートされているかどうかはわかりません。しかし、なぜそれが機能しないのかわかりません。

特定の理由で JBossCache 3 を省略しましたか?

于 2009-08-27T08:40:35.003 に答える