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"/>
関連情報