3.2. エビクション設定
Data Grid 8 は、以前のバージョンと比較して、エビクション設定を簡素化します。ただし、エビクション設定は、データグリッドのさまざまなバージョン間で多数の変更が加えられているため、移行が簡単ではない可能性があります。
Data Grid 7.2 以降、memory
要素が設定内の eviction
要素に置き換わります。このセクションでは、memory
要素のみを使用したエビクション設定について説明します。eviction
要素を使用する設定の移行については、Data Grid 7.2 のドキュメントを参照してください。
3.2.1. ストレージタイプ
Data Grid では、次のオプションを使用して、エントリーをメモリーに保存する方法を制御できます。
- オブジェクトを JVM ヒープメモリーに格納します。
- バイトをネイティブメモリー (オフヒープ) に格納します。
- バイトを JVM ヒープメモリーに格納します。
Data Grid 8 の変更
以前の 7.x バージョンおよび 8.0 では、object
、binary
、および off-heap
要素を使用してストレージタイプを設定していました。
Data Grid 8.1 以降では、storage
属性を使用して、オブジェクトを JVM ヒープメモリーに格納するか、バイトとしてオフヒープメモリーに格納します。
JVM ヒープメモリーにバイトを格納するには、encoding
要素を使用して、データのバイナリーストレージ形式を指定します。
Data Grid 7.x | Data Grid 8 |
---|---|
|
|
|
|
|
|
Data Grid 8 のオブジェクトストレージ
デフォルトでは、Data Grid 8.1 はオブジェクトストレージ (JVM ヒープ) を使用します。
<distributed-cache> <memory /> </distributed-cache>
storage="HEAP"
を明示的に設定して、データをオブジェクトとして JVM ヒープメモリーに格納することもできます。
<distributed-cache> <memory storage="HEAP" /> </distributed-cache>
Data Grid 8 のオフヒープストレージ
データをバイトとしてネイティブメモリーに保存するには、storage
属性の値として "OFF_HEAP"
を設定します。
<distributed-cache> <memory storage="OFF_HEAP" /> </distributed-cache>
オフヒープアドレス数
以前のバージョンでは、offheap
の address-count
属性を使用すると、衝突を回避するためにハッシュマップで使用可能なポインターの数を指定できます。Data Grid 8.1 では、address-count
は使用されなくなり、オフヒープメモリーは衝突を回避するために動的にサイズ変更されます。
Data Grid 8 のバイナリーストレージ
encording
要素を使用して、キャッシュエントリーのバイナリーストレージ形式を指定します。
<distributed-cache> <!--Configure MediaType for entries with binary formats.--> <encoding media-type="application/x-protostream"/> <memory ... /> </distributed-cache>
この変更の結果、Data Grid は、byte[]
と混合されたプリミティブと String を格納しなくなり、byte[]
のみを格納します。
3.2.2. エビクションしきい値
エビクションを使用すると、コンテナーが設定されたしきい値より大きくなったときにエントリーを削除することで、Data Grid がデータコンテナーのサイズを制御できます。
Data Grid 7. x および 8.0 では、キャッシュ内のエントリーの最大制限を定義する 2 つのエビクションタイプを指定します。
-
COUNT
は、キャッシュ内のエントリーの数を測定します。 -
MEMORY
は、キャッシュ内のすべてのエントリーが占めるメモリーの量を測定します。
設定した設定に応じて、メモリーの数または合計量のいずれかが最大値を超えると、Data Grid は未使用のエントリーを削除します。
Data Grid 7.x および 8.0 も長いようなデータコンテナーのサイズを規定する size
属性を使用します。設定するストレージの種類に応じて、エントリーの数またはメモリーの量が size
属性の値を超えると、エビクションが発生します。
Data Grid 8.1 では、size
属性は COUNT
および MEMORY
とともに非推奨になりました。代わりに、次の 2 つの方法のいずれかでデータコンテナーの最大サイズを設定します。
-
max-count
属性を持つエントリーの総数。 -
max-size
属性を持つメモリーの最大量 (バイト単位)。
エントリーの総数に基づくエビクション
<distributed-cache> <memory max-count="..." /> </distributed-cache>
最大メモリー量に基づくエビクション
<distributed-cache> <memory max-size="..." /> </distributed-cache>
3.2.3. エビクションストラテジー
エビクション戦略は、Data Grid がエビクションを実行する方法を制御します。
Data Grid 7.x および 8.0 では、strategy
属性を使用して次のエビクション戦略のいずれかを設定できます。
ストラテジー | 説明 |
---|---|
| Data Grid はエントリーを削除しません。これは、エビクションを設定しない限り、デフォルト設定です。 |
| Data Grid は、キャッシュが設定されたサイズを超えないように、メモリーからエントリーを削除します。これは、エビクションを設定するときのデフォルト設定です。 |
|
Data Grid は削除を実行しません。削除は、 |
|
Data Grid は、設定されたサイズを超える場合、キャッシュに新しいエントリーを書き込みません。キャッシュに新しいエントリーを書き込む代わりに、Data Grid は |
Data Grid 8.1 では、以前のバージョンと同じ戦略を使用できます。ただし、strategy
属性は when-full
属性に置き換えられます。
<distributed-cache> <memory when-full="<eviction_strategy>" /> </distributed-cache>
エビクションアルゴリズム
Data Grid 7.2 では、エビクションアルゴリズムを設定する機能は、Low Inter-Reference Recency Set (LIRS) とともに非推奨になりました。
バージョン 7.2 以降、Data Grid には、TinyLFU と呼ばれる Least Frequently Used (LFU) キャッシュ置換アルゴリズムのバリエーションを実装する Caffeine キャッシングライブラリーが含まれています。オフヒープストレージの場合、Data Grid は LeastRecent Used (LRU) アルゴリズムのカスタム実装を使用します。
3.2.4. エビクション設定の比較
異なる Data Grid バージョン間でエビクション設定を比較します。
オブジェクトストレージとエントリー数の排除
7.2 から 8.0
<memory> <object size="1000000" eviction="COUNT" strategy="REMOVE"/> </memory>
8.1
<memory max-count="1MB" when-full="REMOVE"/>
オブジェクトストレージとメモリー量の排除
7.2 から 8.0
<memory> <object size="1000000" eviction="MEMORY" strategy="MANUAL"/> </memory>
8.1
<memory max-size="1MB" when-full="MANUAL"/>
バイナリーストレージとエントリー数の排除
7.2 から 8.0
<memory> <binary size="500000000" eviction="MEMORY" strategy="EXCEPTION"/> </memory>
8.1
<cache> <encoding media-type="application/x-protostream"/> <memory max-size="500 MB" when-full="EXCEPTION"/> </cache>
バイナリーストレージとメモリー量の排除
7.2 から 8.0
<memory> <binary size="500000000" eviction="COUNT" strategy="MANUAL"/> </memory>
8.1
<memory max-count="500 MB" when-full="MANUAL"/>
オフヒープストレージとエントリー数の排除
7.2 から 8.0
<memory> <off-heap size="10000000" eviction="COUNT"/> </memory>
8.1
<memory storage="OFF_HEAP" max-count="10MB"/>
オフヒープストレージとメモリー量の排除
7.2 から 8.0
<memory> <off-heap size="1000000000" eviction="MEMORY"/> </memory>
8.1
<memory storage="OFF_HEAP" max-size="1GB"/>
関連情報