私は、Hazelcastクライアント/サーバートポロジでSpring-Boot、Spring-Data/JPAを使用しています。私のテスト・アプリケーションの一部では、クライアント側でCRUD操作を実行する時間を計算しています(サーバーはリレーショナル・データベースと対話しています)。 write-delay-secondsを10に設定することで、マップ(Store)をwrite-behindに設定しました。hazelcastスプリングデータライトスルー
Spring-Dataのsave()は、永続エンティティを返します。したがって、クライアントアプリケーションでは、(サーバー)が永続エンティティを返すまで、アプリケーションフローはブロックされます。
クライアントがエンティティが存続するのを待つ必要がない場合は、別の方法があります。新しいデータがマップに保存されると、バックに固執することは非同期的に起こるという印象の下にあった - クライアントアプリケーションは待たなければならないだろう。 hazelast.xmlで
地図の設定:
<map name="com.foo.MyMap">
<map-store enabled="true" initial-mode="EAGER">
<class-name>com.foo.MyMapStore</class-name>
<write-delay-seconds>10</write-delay-seconds>
</map-store>
</map>
@NeilStevenson私はあなたの応答が特に参考ません。私はearlier postで地図キーをどこでどのように生成するかについて尋ねました。あなたは、このトピックについて何の光も出さないドキュメンテーションに私を指摘しました。ヘイルキャスト(およびその他)の例も同じです。
キャッシュを1位に置くのは、データベースにヒットすることを避けることです。データを(save()経由で)追加するときには、マップの一意のキーも生成する必要があります。このキーは、データベーステーブルのEntity.Idにもなります。これらのIDを生成するハローキャストクライアントであるため、バックエンドでレコードが保持されるのを待つ必要はありません。
保存されたオブジェクトを返すためにsave()を待つ唯一の理由は、IDのために例外をキャッチすることだけです。
RDBMS上の自動生成された@Idカラムのように(一般的に)永続システムによって変更された可能性があるため、 'save()'メソッドは永続化されたエントリを返します –
このhttp: //docs.hazelcast.org/docs/3.4/manual/html/map-persistence.htmlライトバックが設定されているときに非同期ストアを待たずに 'map.put'操作が返されます。そして、これが何を使用すべきかです。これはバグのように聞こえるかもしれませんが、あなたが思っていたものとはまったく異なるものを設定しました上記のリンクに記載されているようにwrite-behindを設定したことを確認してください。また、Hazelcast(バネデータなし)だけで動作を試すことができますか? –