2017-02-08 6 views
0

Igniteが提供するデータグリッド機能を使用することを考えています。私はApache Igniteの1つの側面についてはっきりしていません。Igniteがヒープに値を格納する方法

オブジェクトをIgnite Cacheに入れたとき(オフヒープが有効になっていないため、ヒープにのみエントリを格納する)、オブジェクトをシリアル化してヒープに格納するのか、オブジェクトを格納するのかそのまま?

同じJVM(Ignite Valueが格納されている)上で実行されている(IgniteCache#getを使用して)プロセスから格納された値にアクセスするとIgniteは最初に値を逆シリアル化してからプロセスに渡しますか?

質問に対する回答が「はい」の場合は、キャッシュのパフォーマンスを向上させるためのシリアライズのオーバーヘッドを回避できる回避策があることを知りたいと思います。

答えて

0

Igniteは値をバイナリ形式で格納します。デフォルトでは、値は読み取るたびに逆シリアル化されます。

CacheConfiguration.copyOnReadに設定すると、デシリアライズされた値がバイナリ形式で共有されます。これにより、読み取りパフォーマンスは向上しますが、メモリ消費量も増加します。また、このようにオブジェクトの変異を避けるべきです。

デシリアライズを避けるもう1つの方法は、withKeepBinary()フラグを使用することです。設定すると、キャッシュは逆シリアル化されたオブジェクトの代わりにBinaryObjectインスタンスを返します。詳細については、このページを参照してください:https://apacheignite.readme.io/docs/binary-marshaller

+0

私はバイナリMarshallerを使用する場合、私はまだオブジェクトとして値を取得するために逆シリアル化を実行する必要がありますか? –

+0

上記の記述はすべて、どのMarshallerにも当てはまります( 'withKeepBinary()'はもちろん、 'BinaryMarshaller'にとって一意です)。 –

関連する問題