2012-01-24 6 views
3

私の理解に基づいて、トランザクションは完了するとすぐにフラッシュされません。それらはメモリ内のキャッシュに格納され、EntityManagerが費用対効果の高いと判断した場合にのみDBに書き込まれます。私はこの場合L1キャッシュが利用されていると信じていますが、私が間違っていれば私を修正します。JPA分散環境のPersistenceContext

私の質問は、分散環境では、Persistence Contextで使用されるキャッシュが配布されていますか?

答えて

2

L1キャッシュ(セッションキャッシュ、永続コンテキスト)は、環境が分散しているかどうかに関係なく、常に同じ方法で動作します。セッションキャッシュはセッションに属し、同じマシン上または異なるマシン上に複数のセッションを持つことができます。そのため、問題ではありません。

分散環境では、2番目のレベルのキャッシュを気にする必要があります。

アプリケーションをクラスタで実行する場合、JPAプロバイダがサポートしている場合は、クラスタ対応のL2キャッシュ実装を使用する必要があります(たとえば、Hibernateのドキュメントの21.2. The Second Level Cacheを参照)。

同じデータベースにアクセスする他のアプリケーションがある場合は、致命的な場合に矛盾を避け、他の場合には矛盾を許容するようにキャッシュ戦略を慎重に構成する必要があります。

+0

私は、クラスタ化された環境でL1キャッシュが動作するときにどのように動作するのだろうかと思います。分散環境と非分散環境の両方で同じ方法でどのように動作するのか分かりません。例えば。クラスター化されると、L2キャッシュ・データが複製されます。これは、1つのマシンまたは複数のマシンにクラスタ化された設定がある場合に発生します。 L1キャッシュでは、データはクラスタ化された環境で複製されるかどうか? – citress

+0

@citress:セッションキャッシュは、特定のマシンに属する特定のセッションに属しているため、セッションキャッシュを複製する必要はありません。 – axtavt

+0

痛みを意味するわけではありません、私は理解しようとしています。セッションキャッシュは特定のセッションに属しますが、そのセッションが必ずしも同じマシン上に終わるとは限りません。フェールオーバーが利用可能なクラスタ環境では、JVMがダウンすると、セッションとそのキャッシュが別の場所で使用可能になる必要がありますか? – citress

関連する問題