9.4. キャッシュパッシベーション
キャッシュローダーを使用して、 キャッシュでのエビクションでノードのパッシベーションとアクティベーションを強制することが可能です。
キャッシュのパッシベーションは、 インメモリキャッシュからオブジェクトを削除し、 エビクション時に 2 次データストア (ファイルシステムやデータベースなど) に書き込むプロセスです。 キャッシュのアクティベーションは、 オブジェクトを使用する必要がある時にオブジェクトをデータストアからインメモリキャッシュへ復元するプロセスです。 どちらの場合でも、 データストアからの読み取りとデータストアへの書き込みには設定されたキャッシュローダーが使用されます。
有効なエビクションポリシーがキャッシュよりノードをエビクトすると、 パッシベーションが有効になっている場合はノードがパッシベートされたという通知がキャッシュリスナに送られ、 ノードとその子ノードがキャッシュローダーストアに保存されます。 エビクトされたノードをユーザーが読み出そうとすると、 ノードがキャッシュローダーストアよりメモリへロード (レイジーなロード) されます。 ロードされると、 ノードとその子ノードはキャッシュローダーより削除され、 ノードがアクティベートされたという通知がキャッシュリスナに送られます。
キャッシュのパッシベーションやアクティベーションを有効にするには、
passivation を true に設定します。 デフォルト値は false です。 パッシベーションが使用される場合は、 最初に設定されたキャッシュローダーのみが使用され、 他のキャッシュローダーは無視されます。
9.4.1. パッシベーションを無効にした場合と有効にした場合のキャッシュローダーの挙動 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
パッシベーションが無効な場合、 要素が変更、 追加、 削除されるとその変更内容がキャッシュローダーによってバックエンドストアに永続されます。 エビクションとキャッシュローディングに直接的な関係はありません。 エビクションを使用しない場合、 永続ストア内のデータは基本的にメモリ内のデータのコピーとなります。 エビクションを使用する場合、 永続ストア内のデータは基本的にメモリ内のデータのサブセットとなります (メモリからエビクトされたノードが含まれます)。
パッシベーションが有効な場合、 エビクションとキャッシュローダーに直接的な関係が存在します。 エビクションプロセスの一部としてのみキャッシュローダーによる永続ストアへの書き込みが発生します。 アプリケーションがメモリへ読み戻すとデータが永続ストアより削除されます。 この場合、 メモリ内のデータと永続ストア内のデータは全体的な情報セットの 2 つのサブセットとなり、 サブセットは交差しません。
次の簡単な例では、 6 つの手順のうち、 各手順が終了した後に RAM と永続ストアに存在するステートを表しています。
- /A を挿入
- /B を挿入
- エビクションスレッドを実行、 /A をエビクト
- /A を読み取り
- エビクションスレッドを実行、 /B をエビクト
- /B を削除
パッシベーションが無効の場合は次のようになります。
1) Memory: /A Disk: /A
2) Memory: /A, /B Disk: /A, /B
3) Memory: /B Disk: /A, /B
4) Memory: /A, /B Disk: /A, /B
5) Memory: /A Disk: /A, /B
6) Memory: /A Disk: /A
パッシベーションが有効な場合は次のようになります。
1) Memory: /A Disk:
2) Memory: /A, /B Disk:
3) Memory: /B Disk: /A
4) Memory: /A, /B Disk:
5) Memory: /A Disk: /B
6) Memory: /A Disk: