2017-05-15 6 views
0

私は、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のために例外をキャッチすることだけです。

+0

RDBMS上の自動生成された@Idカラムのように(一般的に)永続システムによって変更された可能性があるため、 'save()'メソッドは永続化されたエントリを返します –

+0

このhttp: //docs.hazelcast.org/docs/3.4/manual/html/map-persistence.htmlライトバックが設定されているときに非同期ストアを待たずに 'map.put'操作が返されます。そして、これが何を使用すべきかです。これはバグのように聞こえるかもしれませんが、あなたが思っていたものとはまったく異なるものを設定しました上記のリンクに記載されているようにwrite-behindを設定したことを確認してください。また、Hazelcast(バネデータなし)だけで動作を試すことができますか? –

答えて

0

残念ながら、それは動作する方法です。https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#save-S-を参照してください。

外部ストアによって、保存されたエントリが何らかの形で変更される可能性があります。

これを実行しないことはわかっていますが、定義された保存のバリアントはありません。

これは、現在のところ、一般的なSpringリポジトリ定義では利用できないようです。なぜSpring Dataチームの機能要求を提起しないのですか?

+0

ありがとうございます。私は、次の反復では、サービスがMapと直接対話する「純粋な」Hazelcastを使用すると考えています。残りのビットは「トランザクション性」です。私はこれを古いドキュメント(3.5)で見たことがありますが、現在の3.8.xではそうではありません。ロールバックする機能が必要です 私の他の投稿で私がキー生成に関する質問をしましたか? – maspen