Hitachi

インメモリデータグリッド Hitachi Elastic Application Data Store ユーザーズガイド


11.15.1 優先度が低いデータを自動的に削除する手順

この項の内容は,メモリキャッシュまたはディスクキャッシュを使用する場合にお読みください。

データ自動削除機能を使用して,優先度が低いデータを自動的に削除する手順について説明します。

ポイント

データ自動削除機能を使用する場合は,Javaヒープの容量,およびExplicitヒープの容量について見積もる必要があります。データ自動削除機能を使用する場合の見積もりの方法については,「4. 必要なリソースを確認する」を参照してください。

〈この項の構成〉

(1) データ総量監視機能を有効にする

データ自動削除機能の前提となるデータ総量監視機能を有効にしてください。データ総量監視機能については,「11.14 データの格納先の空き容量を管理したい」を参照してください。

(2) データの自動削除ポリシーを決める

eads.cache.eviction.policyパラメタで,データの自動削除ポリシーを決めます。データ自動削除機能を使用して,しきい値を超えたデータを削除する場合の動作を指定する必要があります。

eads.cache.eviction.policyパラメタに,次のどちらかを指定してください。

なお,データの更新順およびデータの参照順は,次の操作が実行されるたびに更新されます(データの更新順およびデータの参照順が新しくなります)。

表11‒6 データの更新順およびデータの参照順が更新される操作一覧

データの自動削除ポリシー

データの更新順およびデータの参照順が更新される操作

API

コマンド

FIFO

データの更新操作
  • put

  • putAll

  • create

  • update

  • replace

データの更新操作

LRU

データの更新操作
  • put

  • putAll

  • create

  • update

  • replace

データの参照操作
  • get

  • getAll

データの更新操作
データの参照操作
注意事項

データの更新順およびデータの参照順の情報は,EADSサーバが起動している間だけ保持されます。EADSサーバを再起動した場合は初期化されます。

注意事項

データを多重化している場合に,eads.cache.eviction.policyパラメタにLRUを指定したときは,データが使用された順番の管理方法がEADSサーバによって異なります。

  • データの格納先EADSサーバは,データの更新操作およびデータの参照操作の順番で管理します。

  • データのコピー先EADSサーバは,データの更新操作の順番で管理します。

そのため,障害などが発生し,アクセス先が自動的にデータのコピー先EADSサーバに切り替わった直後は,データの更新操作およびデータの参照操作の順ではなく,データの更新操作の順番が古いデータから削除されます。そのあとは,データの更新操作およびデータの参照操作の順番で管理します。

注意事項

スケールアウト処理またはリバランス処理で格納先のEADSサーバが変更されたデータは,変更前のデータの更新順およびデータの参照順の情報に関係なく,新たに更新されたデータとして管理します。

(3) データを削除するためのしきい値を決める

eads.cache.eviction.keyCountパラメタで,データを削除するためのしきい値として使用する1レンジ当たりのデータ件数を決めます。

データ自動削除機能の前提となるデータ総量監視機能による1EADSサーバに格納する1レンジ当たりのデータ件数(eads.cache.keyCountパラメタ)は,次の条件を満たすような値を指定する必要があります。

なお,eads.cache.keyCountパラメタの指定値は,「4.1.2(1)(a) 1EADSサーバに格納するデータ件数」を参照して見積もってください。

■条件

eads.cache.keyCountパラメタの指定値 >

  データ自動削除機能を使用するキャッシュの

  キャッシュ定義のeads.cache.eviction.keyCountパラメタの指定値の総和

(4) データ自動削除機能で優先度が低いデータを削除する

データ総量監視機能を有効にして,eads.cache.eviction.policyパラメタおよびeads.cache.eviction.keyCountパラメタを指定したら,データ自動削除機能を使用できます。

データ自動削除機能は,API(create,put,putAll)およびeztool putコマンドによって格納される新規データがeads.cache.eviction.keyCountパラメタで指定したしきい値を超えた場合に,eads.cache.eviction.policyパラメタで指定したデータの自動削除ポリシーに従って,しきい値を超えたデータが自動的に削除されます。

データの自動削除は,createおよびputの処理の場合はremoveが使用されます。putAllの処理の場合は削除件数に関係なく,removeAllが使用されます。

注意事項
  • API(put,putAll)およびeztool putコマンドの場合,新規データを格納するかどうかに関係なく,しきい値を超えるデータは削除されます。そのため,既存のデータを更新する場合には,一時的にデータ件数がしきい値を下回ることがあります。

  • データの削除に失敗した場合,データの更新操作は実行されません。エラーコードが返却されます。

  • API(putAll)の場合,データの削除に失敗したキーはデータの更新が実行されません。データの削除に成功したキーはデータの更新が実行されます。

(5) データ自動削除機能を使用する場合の注意事項

  1. EADSサーバのデータが自動で削除されると問題になる場合は,データ自動削除機能を使用しないでください。

  2. クラスタの停止時のデータの読み込みが不要な場合,EADSサーバを起動したときに,データを読み込まないでキャッシュを再作成する次の運用を推奨します。

    • eztool closeコマンドで,クラスを閉塞状態にする。

    • eztool stopコマンドに--no_exportオプションを指定してクラスタを終了する。

    • ezstartコマンド,またはezserverコマンドでEADSサーバを開始する。

    • ディスクキャッシュを使用している場合,すべてのディスクキャッシュに対してeztool deleteecfコマンドでキャッシュファイルを削除する。

    • eztool createcacheコマンドで,使用するすべてのキャッシュを再作成する。

    • eztool openコマンドで,クラスタの閉塞状態を解除する。

  3. 次のコマンドを使用してデータを読み込んだ場合は,データの読み込み順で,データの更新操作およびデータの参照操作の順番が初期化されます。

    • メモリキャッシュおよびディスクキャッシュを使用している場合

      ezstart -rコマンド(復旧したEADSサーバだけが対象となります)

      ezserver -rコマンド(復旧したEADSサーバだけが対象となります)

    • メモリキャッシュを使用している場合

      eztool importコマンド

    • ディスクキャッシュを使用している場合

      eztool resumeコマンド

      eztool importecfコマンド

  4. メモリキャッシュでデータの読み込みを行う場合の注意点を次に示します。

    • eztool importコマンドでストアデータファイルからデータを読み込んだ場合に,しきい値として指定したレンジのデータ件数を超えるレンジからは,それ以上データの読み込みを行いません。しきい値として指定したデータ件数を超えるレンジのデータが格納されていた場合,コマンドのリターンコードに10が返却されます。また,すべてのデータを読み込む場合は,レンジに格納されたデータ件数以上の値をしきい値に指定する必要があります。

    • eztool importコマンドで,eztool exportコマンドに-sまたは--singleオプションを指定して出力したストアデータファイルは読み込まないで,eztool createcacheコマンドでキャッシュを再作成し,必要に応じてデータを再投入することを推奨します。eztool exportコマンドに-sまたは--singleオプションを指定して出力したストアデータファイルを読み込む場合は,データ自動削除機能のしきい値(eads.cache.eviction.keyCountパラメタの指定値)をストアデータファイル出力時に設定してあったしきい値よりも小さい値に変更しないでください。

  5. ディスクキャッシュでデータの読み込みを行う場合の注意点を次に示します。

    • eztool importecfコマンドで永続データを再配置する場合,しきい値として指定したレンジのデータ件数を超えるレンジからは,それ以上データの読み込みを行いません。しきい値として指定したデータ件数を超えるレンジのデータが格納されていた場合,コマンドのリターンコードに10が返却されます。また,すべてのデータを読み込む場合は,レンジに格納されたデータ件数以上の値をしきい値に指定する必要があります。

    • eztool importecfコマンドで,キャッシュデータファイルおよびキャッシュインデックスファイルが破損していたり,障害時のファイルだったりした場合は読み込まないでeztool createcacheコマンドでキャッシュを再作成し,必要に応じてデータを再投入することを推奨します。また,読み込み対象のファイルが破損していたり,障害時のファイルだったりした場合に読み込むときは,データ自動削除機能のしきい値(eads.cache.eviction.keyCountパラメタの指定値)をキャッシュ使用時に設定してあったしきい値よりも小さい値に変更しないでください。

  6. ディスクキャッシュを使用する場合,データ自動削除機能を使用するときでも,APIでkeyを削除するときと同様に,コンパクションを実行するまでキャッシュデータファイルの空き容量は増加しません。そのため,空き容量が不足した場合は,API(create,put,putAll)がデータ総量監視機能のキャッシュファイルの空き容量不足でエラーとなります。

  7. API(create,put,putAll)がデータ総量監視機能の登録済みキー数の上限でエラーとなった場合は,次のパラメタの指定値を見直してください。

  8. API(create,put,putAll)がデータ総量監視機能によるvalueの格納先であるExplicitヒープの空き容量不足でエラーとなった場合は,valueのサイズが容量見積もり時より大きくなっていないかを見直してください。または,見積もり結果が過少でないかについても確認してください。

  9. API(create,put,putAll)がデータ総量監視機能のキャッシュファイルの空き容量不足(ディスクキャッシュ使用時)でエラーとなった場合は,レコード1件分のサイズが容量見積もり時より大きくなっていないかを見直してください。または,見積もり結果が過少でないか,コンパクションで空き容量を確保できているかについても確認してください。

  10. スケールアウト処理およびリバランス処理を実行したときに別レンジへ移動したデータは,移動元レンジでの更新順および参照順は無視され,最新データとして再配置されます。

  11. リバランス処理を実行している間,データ自動削除機能を使用しているキャッシュでは,指定したデータの自動削除ポリシーに加えて,次に示すデータの自動削除ポリシーにも従います。そのため,次に示すデータの自動削除ポリシーが適用された場合に問題となる用途では,リバランス処理を実行しないでください。

    ■リバランス処理を実行中に適用されるデータの自動削除ポリシー

    結合先のレンジで格納できるデータの空き(キー数および容量)が少ない場合,結合元のレンジ(移動するレンジ)に格納されたデータは,キー数がしきい値以下であっても,結合先のレンジで格納できるデータの空きに収まるまで一部または全部削除されます。また,通信タイミングによって,最も古いデータではなく,最も新しいデータが削除されることがあります。

  12. リバランス処理を実行している間,結合元のレンジ(移動するレンジ)に格納されたデータに対するAPI(create,put,putAll)は,次に示す一時的なエラーを返却することがあります。

    なお,API(create,put)の場合は,EADSクライアント(JavaとC)およびユーザファンクションが該当します。API(putAll)の場合は,EADSクライアント(JavaとC)が該当します。

    ■EADSサーバの位置変更開始時点での結合先のレンジに格納できるデータの空き(キー数)がない場合

    • EADSクライアント(Java)とユーザファンクションのとき

      CacheException.EAD_ERROR_SERVER_LIMIT_KV_COUNT_TEMPORARILY

    • EADSクライアント(C)のとき

      EAD_ERROR_SERVER_LIMIT_KV_COUNT_TEMPORARILY

    ■EADSサーバの位置変更開始時点での結合先のレンジに格納できるデータの空き(容量)が少ない場合

    • EADSクライアント(Java)とユーザファンクションのとき

      CacheException.EAD_ERROR_SERVER_LIMIT_EXTERNAL_MEMORY_TEMPORARILY

    • EADSクライアント(C)のとき

      EAD_ERROR_SERVER_LIMIT_EXTERNAL_MEMORY_TEMPORARILY