0

ノード間のキャッシュ レプリケーション ソリューションに取り組んでいます

ノード A - マスター ノード => 休止状態 + データベース + セカンダリ キャッシュとしての Ehcache
ノード B - 地域ノード => プライマリ キャッシュとしての Ehcache。no Hibernate

Node B は、クエリの近くのキャッシュとしてのみ使用されます。

現在、ノード A のデータ (SudentInfo と言う) を更新しています。データは永続化され、正しくキャッシュされます。レプリケーション側 (私は JMS を使用しています) では、ノード B にメッセージを送信します。しかし問題は、送信するメッセージがインスタンス CacheEntry(deep Inside Element) のものであり、元のオブジェクト (StudentInfo) を復活させる方法がないことです。ノード B で取得したのは、学生のいくつかの属性を持つ CacheEntry ですが、実際には学生オブジェクトではありません。

ノード B では Hibernate セッション/永続性は必要ないことに注意してください。ノード B は高速クエリ専用であり、永続性はノード A を介して行われます。CacheEntry を実際のオブジェクトに変換する方法はありますか? または CacheEntry ではなく元のオブジェクトを複製するように ehcache に指示します。

助けてくれてありがとう

4

1 に答える 1

0

「二次キャッシュとしての Ehcache」とはどういう意味ですか? 二次キャッシュとして?

その場合、レプリケートされるオブジェクトはオブジェクトではなく、Hibernate がオブジェクトを格納するために使用するデータであるため、データベースに格納されている行レベルのデータと本質的に同等です。

この記事をご覧ください。2 番目のレベルのキャッシュの内容について説明しています 。Hibernate の 2 番目のレベルのキャッシュとクエリ キャッシュを真に理解する

あなたへの私の質問は、データベースと通信するようにノード B を構成しない理由です。そうすれば、同種のセットアップができます。キャッシングがたまたま機能している場合 - キャッシュされた値を取得し、DB にアクセスしないのは素晴らしいことです - そうでない場合は、DB にアクセスします。

これを行うことができないトポロジー上の理由がない限り、私の意見では、両方のノードを同じ構成/セットアップで実行する方がはるかに簡単です。

于 2010-03-19T00:05:38.127 に答える