あなたの質問に対する簡単な答えはノーです。すべてのアクセスでバイト配列の逆シリアル化を防ぐ方法はありません(1つのマイナーな例外を除いて、以下を参照してください)。
Hazelcastがオブジェクトをクラスター内の他のノードと共有するには、それらのオブジェクトのシリアル化されたバージョンをバイトの配列として渡す必要があります。IMap.get(key)
したがって、 Hazelcastを呼び出すたびに、オブジェクトを所有するノードからオブジェクトを表すバイトの配列を取得し、それを逆シリアル化して、オブジェクトの複製コピーを作成します。これを回避する方法はなく、クラスター内の複数のノード間で一貫性を保つ分散マップがあります。
マイナーな例外が1つあります。デフォルトでは、IMapsは、要求元ノードが所有するオブジェクトの実際の逆シリアル化されたオブジェクトをキャッシュします。これは、cache-value
構成パラメーター(デフォルトはtrue
)で設定されます。ただし、オブジェクトを変更した後で明示的に(または、、、、またはそのバリエーションの1つ)を実行しない限り、そのキャッシュされた値への変更は他のノードに分散されません。Hazelcastドキュメントのセクション18.1、アイテム2を参照してください。IMap.put(key, value)
replace
set
マップを有効near-cache
にすると、所有ノードからバイト配列を取得する(つまり、ネットワークを介して所有ノードから要求ノードにバイトを転送する)コストを節約できます。これは、要求ノードにバイトをキャッシュするためですが、逆シリアル化は引き続き行われます。すべてのアクセス。これにより、一貫性を犠牲にしてパフォーマンスが向上します。頻繁に変更されないオブジェクトを取得する場合に便利です。