18 キャッシュの構成例
<scheme-ref>
要素が使用されます。スキームの継承の使用を参照してください。サンプルでは最小限の設定のみを指定しています。すべてのオプションを参照するには、スキームのドキュメントへの埋込みリンクを使用してください。
この章の構成は、次のとおりです。
- ローカル・キャッシュ(単一のJVMからアクセス可能)
ローカル・キャッシュ・スキームのサンプルを使用して、単一のJVMからアクセス可能なキャッシュの構成方法を学習します。 - クラスタ化キャッシュ(複数のJVMからアクセス可能)
クラスタ化されたキャッシュ・スキームのサンプルを使用して、複数のJVM (同じキャッシュ・サービスを実行するすべてのクラスタ・ノード)からアクセスできるクラスタ化されたキャッシュの構成方法を学習します。
親トピック: キャッシュの使用
ローカル・キャッシュ(単一のJVMからアクセス可能)
この項では、次の項目について説明します。
- インメモリー・キャッシュ
- サイズ制限があるインメモリー・キャッシュ
- エントリの期限切れが設定されたインメモリー・キャッシュ
- ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュ
- オンディスク・キャッシュ
- サイズ制限があるオンディスク・キャッシュ
- オンディスク永続キャッシュ
- データベースのキャッシュ
親トピック: キャッシュの構成例
インメモリー・キャッシュ
例18-1では、local-scheme
要素を使用して、インメモリー・キャッシュを定義します。キャッシュには、JVMヒープで可能なかぎりの容量が保存されます。
例18-1 ローカルのインメモリー・キャッシュの構成
<local-scheme> <scheme-name>SampleMemoryScheme</scheme-name> </local-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
サイズ制限があるインメモリー・キャッシュ
<local-scheme>
要素に<high-units>
サブ要素を追加すると、キャッシュのサイズが制限されます。この例では、キャッシュのサイズが1000エントリに制限されます。制限を超えると、スキームの<eviction-policy>
によって、キャッシュからの削除対象となる要素が決定されます。local-schemeを参照してください。
例18-2 サイズ制限があるインメモリー・ローカル・キャッシュの構成
<local-scheme> <scheme-name>SampleMemoryLimitedScheme</scheme-name> <high-units>1000</high-units> </local-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
エントリの期限切れが設定されたインメモリー・キャッシュ
<local-scheme>
要素に<expiry-delay>
サブ要素を追加すると、指定した期間内に更新されなかったキャッシュ・エントリが自動的に期限切れになります。期限切れになるとそのエントリは無効化され、キャッシュから削除されます。local-schemeを参照してください。
例18-3 エントリの期限切れが設定されたインメモリー・キャッシュの構成
<local-scheme> <scheme-name>SampleMemoryExpirationScheme</scheme-name> <expiry-delay>5m</expiry-delay> </local-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュ
例18-4では、overflow-scheme
要素を使用して、サイズが制限されたインメモリー・キャッシュを定義します。インメモリー(<front-scheme>
)のサイズの上限に達すると、キャッシュの内容の一部がディスク(<back-scheme>
)に移動されます。front-schemeの<eviction-policy>
によって、フロントからバックへの移動対象となる要素が決定されます。
この例では、キャッシュのフロントおよびバックの実装にサイズ制限があるオンディスク・キャッシュおよびオンディスク・キャッシュの例が再利用されています。
例18-4 ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュの構成
<overflow-scheme> <scheme-name>SampleOverflowScheme</scheme-name> <front-scheme> <local-scheme> <scheme-ref>SampleMemoryLimitedScheme</scheme-ref> </local-scheme> </front-scheme> <back-scheme> <external-scheme> <scheme-ref>SampleDiskScheme</scheme-ref> </external-scheme> </back-scheme> </overflow-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
オンディスク・キャッシュ
例18-5では、external-scheme
要素を使用して、オンディスク・キャッシュを定義します。
ノート:
この例では、bdb-store-manager
(Berkeley Database)を使用して、そのオンディスク記憶域を実装します。これ以外の外部記憶域オプションについては、「external-scheme」を参照してください。
例18-5 オンディスク・キャッシュを定義する構成
<external-scheme> <scheme-name>SampleDiskScheme</scheme-name> <bdb-store-manager/> </external-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
サイズ制限があるオンディスク・キャッシュ
external-scheme
要素に<high-units>
サブ要素を追加すると、キャッシュのサイズが制限されます。この例では、キャッシュのサイズが100万エントリに制限されます。制限を超えると、LRUエビクションが使用され、キャッシュからの削除対象となる要素が決定されます。これ以外のサイズ制限がある外部キャッシング方法については、paged-external-schemeを参照してください。
例18-6 サイズ制限があるオンディスク・キャッシュの構成
<external-scheme> <scheme-name>SampleDiskLimitedScheme</scheme-name> <bdb-store-manager/> <high-units>1000000</high-units> </external-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
オンディスク永続キャッシュ
例18-7では、external-scheme
要素を使用して、単一のJVMの長期記憶域としての使用に適したキャッシュを定義します。
外部キャッシュは一般的に、大きなデータセットの一時記憶域に使用され、JVMのシャットダウン時に自動的に削除されます。bdb-store-manager
ストレージ・マネージャのいずれかを使用した場合は、非クラスタ化キャッシュで外部キャッシュを長期記憶域として使用できます。永続性(長期記憶域)を参照してください。クラスタ化の永続性については、データベースのパーティション・キャッシュを参照してください。
データが格納されるファイルの名前を指定するには、{cache-name}
マクロを使用します。パラメータ・マクロの使用を参照してください。
例18-7 Berkeley DBによるオンディスク永続キャッシュの構成
<external-scheme> <scheme-name>SampleDiskPersistentScheme</scheme-name> <bdb-store-manager> <directory>/my/storage/directory</directory> <store-name>{cache-name}.store</store-name> </bdb-store-manager> </external-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
データベースのキャッシュ
例18-8では、read-write-backing-map-scheme
要素を使用して、データベースのキャッシュを定義します。このスキームでは、データベースの内容の一部であるローカル・キャッシュが保持されます。キャッシュ・ミスによってデータベース全体が読み取られ、元のデータベースにキャッシュが書き込まれます。
cachestore-scheme
要素は、com.tangosol.net.cache.CacheLoader
またはcom.tangosol.net.cache.CacheStore
のいずれかのインタフェースを実装するカスタム・クラスによって構成されます。このクラスは、キャッシュ・エントリの読取りや書込みなど、データベースに対するすべての操作を担当します。キャッシュ・ストアの実装のサンプルを参照してください。
キャッシュ・ストアの実装に対して、バッキングされるキャッシュの名前を通知するには、{cache-name}
マクロを使用します。パラメータ・マクロの使用を参照してください。
例18-8 データベースのキャッシュの構成
<read-write-backing-map-scheme> <scheme-name>SampleDatabaseScheme</scheme-name> <internal-cache-scheme> <local-scheme> <scheme-ref>SampleMemoryScheme</scheme-ref> </local-scheme> </internal-cache-scheme> <cachestore-scheme> <class-scheme> <class-name>com.tangosol.examples.coherence.DBCacheStore</class-name> <init-params> <init-param> <param-type>java.lang.String</param-type> <param-value>{cache-name}</param-value> </init-param> </init-params> </class-scheme> </cachestore-scheme> </read-write-backing-map-scheme>
親トピック: ローカル・キャッシュ(単一のJVMからアクセス可能)
クラスタ化キャッシュ(複数のJVMからアクセス可能)
この項では、次の項目について説明します。
- パーティション・キャッシュ
- オーバーフローが設定されたパーティション・キャッシュ
- ジャーナル記憶域が設定されたパーティション・キャッシュ
- データベースのパーティション・キャッシュ
- シリアライザが設定されたパーティション・キャッシュ
- 永続性が設定されたパーティション・キャッシュ
- ニア・キャッシュ
- ビュー・キャッシュ
- レプリケート・キャッシュ
- オーバーフローが設定されたレプリケート・キャッシュ
親トピック: キャッシュの構成例
パーティション・キャッシュ
例18-9では、distributed-scheme
を使用して、クラスタ化キャッシュを定義します。このキャッシュでは、キャッシュ記憶域がクラスタ・ノード全体にわたってパーティション化されます。
インメモリー・キャッシュが、各クラスタ・ノードのキャッシュ記憶域を定義するために使用されます。キャッシュの記憶域の合計容量は、パーティション・キャッシュ・サービスを実行する、記憶域が有効なクラスタ・ノードの合計です。
例18-9 パーティション・キャッシュの構成
<distributed-scheme> <scheme-name>SamplePartitionedScheme</scheme-name> <backing-map-scheme> <local-scheme> <scheme-ref>SampleMemoryScheme</scheme-ref> </local-scheme> </backing-map-scheme> </distributed-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
オーバーフローが設定されたパーティション・キャッシュ
backing-map-scheme
要素では、スキーム参照を使用して、他のローカル・キャッシュの任意のサンプルを指定できます。たとえば、ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュを使用した場合は、記憶域が有効なクラスタ・ノードのそれぞれにローカル・オーバーフロー・キャッシュが設定され、より大量の記憶域容量を利用できます。キャッシュのバックアップ記憶域も同じオーバーフロー・スキームを使用するため、バックアップ・データをディスクにオーバーフローできます。
例18-10 オーバーフローが設定されたパーティション・キャッシュの構成
<distributed-scheme>
<scheme-name>SamplePartitionedOverflowScheme</scheme-name>
<backup-storage>
<type>scheme</type>
<scheme-name>SampleOverflowScheme</scheme-name>
</backup-storage>
<backing-map-scheme>
<overflow-scheme>
<scheme-ref>SampleOverflowScheme</scheme-ref>
</overflow-scheme>
</backing-map-scheme>
</distributed-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
ジャーナル記憶域が設定されたパーティション・キャッシュ
例18-11では、backing-map-scheme
要素を使用して、バッキング・マップにRAMジャーナルを使用するパーティション・キャッシュを定義します。RAMジャーナルは、構成されたメモリー・サイズを超えると、自動的にフラッシュ・ジャーナルに委任します。ジャーナル・スキームの定義を参照してください。
例18-11 RAMジャーナルが設定されたパーティション・キャッシュの構成
<distributed-scheme> <scheme-name>SamplePartitionedJournalScheme</scheme-name> <backing-map-scheme> <ramjournal-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme>
例18-12では、バッキング・マップにフラッシュ・ジャーナルを直接使用するパーティション・キャッシュを定義します。
例18-12 フラッシュ・ジャーナルが設定されたパーティション・キャッシュの構成
<distributed-scheme> <scheme-name>SamplePartitionedJournalScheme</scheme-name> <backing-map-scheme> <flashjournal-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
データベースのパーティション・キャッシュ
backing-map-scheme
要素を切り替えてread-write-backing-map-scheme
を使用すると、キャッシュで、データベースなどの外部ソースに対するエントリをロードおよび格納できます。
例18-13では、データベースのキャッシュを再利用して、データベース・アクセスを定義しています。
例18-13 データベースのパーティション・キャッシュの構成
<distributed-scheme> <scheme-name>SamplePartitionedDatabaseScheme</scheme-name> <backing-map-scheme> <read-write-backing-map-scheme> <scheme-ref>SampleDatabaseScheme</scheme-ref> <internal-cache-scheme
> <local-scheme> <scheme-ref>SampleMemoryScheme</scheme-ref> </local-scheme> </internal-cache-scheme
> </read-write-backing-map-scheme> </backing-map-scheme> </distributed-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
シリアライザが設定されたパーティション・キャッシュ
例18-14では、serializer
要素を使用して、ユーザー定義型のシリアライズおよびデシリアライズに使用されるシリアライザを定義します。この場合、パーティション・キャッシュはPOF (ConfigurablePofContext
)をシリアライズ形式として使用します。POFを使用し、アプリケーションでカスタムのユーザー定義型クラスを使用する場合は、そのクラス用にカスタムのPOF構成も定義する必要があります。POFユーザー定義型の構成要素を参照してください。
例18-14 シリアライザが設定されたパーティション・キャッシュの構成
<distributed-scheme> <scheme-name>SamplePartitionedPofScheme</scheme-name> <service-name>PartitionedPofCache</service-name> <serializer> <instance> <class-name>com.tangosol.io.pof.ConfigurablePofContext</class-name> </instance> </serializer> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme>
tangosol-coherence.xml
デプロイメント・ディスクリプタで定義されるシリアライザも参照できます。
例18-15 シリアライザを参照するパーティション・キャッシュ
<distributed-scheme> <scheme-name>SamplePartitionedPofScheme</scheme-name> <service-name>PartitionedPofCache</service-name> <serializer>pof</serializer> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme>
最後に、すべてのスキームにデフォルトのシリアライザを定義することで、それぞれのキャッシュ・スキーム定義に明示的に<serializer>
要素を含める必要がなくなります。グローバル・シリアライザの定義により、tangosol-coherence.xml
デプロイメント・ディスクリプタで定義されたシリアライザを参照することもできます。
例18-16 デフォルト・シリアライザの定義
<?xml version='1.0'?> <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd"> <defaults> <serializer>pof</serializer> </defaults> ...
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
永続性が設定されたパーティション・キャッシュ
例18-17では、<persistence-environment>
要素を使用して、非同期永続性を使用するパーティション・キャッシュを定義し、記憶域サーバーがデータを非同期的に永続化できるようにします。非同期の永続性により、書込みが書込みの待機時間でブロックされないようになります。「非同期永続性の使用」を参照してください。
<distributed-scheme>
要素の永続性環境を指定することで、キャッシュ構成の非同期永続性を有効にできます。
例18-17 永続性が設定されたパーティション・キャッシュの構成
<distributed-scheme> <scheme-name>SamplePartitionedCachePersistence</scheme-name> <persistence> <environment>async-environment</environment> </persistence> </distributed-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
ニア・キャッシュ
例18-18では、near-scheme
要素を使用して、パーティション・キャッシュのサブセットのローカル・インメモリー・キャッシュを定義します。この定義によって、パーティション・キャッシュにアクセスするクラスタ・ノードに、アクセス頻度の高い要素のローカル・コピーが保持されます。その結果、読取りパフォーマンスはreplicated-scheme
キャッシュに近づき、distributed-scheme
キャッシュと同様の高いスケーラビリティも得られます。
ニア(<front-scheme>
)キャッシュの定義にはサイズ制限があるインメモリー・キャッシュのサンプルが再利用され、バック(<back-scheme>
)キャッシュの定義にはパーティション・キャッシュのサンプルが再利用されます。
front-schemeのサイズ制限付きの構成によって、back-schemeキャッシュがローカルにキャッシュされる量の制限が指定されます。
例18-18 パーティション・キャッシュのローカル・キャッシュの構成
<near-scheme> <scheme-name>SampleNearScheme</scheme-name> <front-scheme> <local-scheme> <scheme-ref>SampleLimitedMemoryScheme</scheme-ref> </local-scheme> </front-scheme> <back-scheme> <distributed-scheme> <scheme-ref>SamplePartitionedScheme</scheme-ref> </distributed-scheme> </back-scheme> </near-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
ビュー・キャッシュ
ビュー・キャッシュは、coherence-cache-configファイルのview-scheme
要素を使用して構成します。<view-scheme>
要素には、スキームの名前である必須サブ要素が1つのみあります。他の構成要素が適用されない場合、結果には既存のキャッシュのすべてのエントリのローカル・ビューが表示されます。デフォルトでは、バック・キャッシュのすべてのエントリがビュー内に表示されます。ただし、<filter>
要素を使用してCoherenceフィルタを指定することで、結果セットを制限できます。
エントリには、<view-scheme>
要素とともにカスタムValueExtractor
を指定することで、ビューへの挿入前に変換を適用できます。変換を適用すると、ビューはread-only
として表示されるため、変更は許可されません。また、ビューが変換されて値が格納されない場合、集計などの操作はできず、実行時エラーになります。
MapListener
を宣言して、ビューのマテリアライズ中に生成されたマップ・イベントなど、すべてのマップ・イベントをインターセプトすることもできます。
<read-only>
要素は、ビューを通してバック・キャッシュのすべての変更を無効にします。ただし、バック・キャッシュで直接変更が発生する可能性はあります。
ミリ秒単位で指定される<reconnect-interval>
は、接続が切断された場合に、基礎となるキャッシュとの再同期が遅延する期間を示します。この期間中、ローカル・コンテンツの再同期をトリガーせずに、ローカル・コンテンツにアクセスできます。値ゼロは、接続されていない場合にビューを使用できないことを示します。
<back-scheme>
要素は、分散スキームまたはリモート・スキームを参照します(Coherence * Extendを使用している場合)。
例18-19 ビュー・キャッシュの構成
<view-scheme> <scheme-name>view</scheme-name> </view-scheme>
この例は、ビュー・キャッシュの最小構成です。ビューは、エントリのフィルタリング、リスナーまたは変換なしで、デフォルトのビュー・キャッシュ・サービスでマテリアライズされます。これは、既存のキャッシュの完全なローカル・コピーです。
例18-20 カスタム・フィルタを使用するビューの構成
<view-scheme> <scheme-name>view-customers-over-40</scheme-name> <back-scheme> <distributed-scheme> <scheme-ref>partitioned-std</scheme-ref> </distributed-scheme> </back-scheme> <view-filter> <class-scheme> <class-name>com.tangosol.util.filter.GreaterFilter</class-name> <init-params> <init-param> <param-type>java.lang.String</param-type> <param-value>age</param-value> </init-param> <init-param> <param-type>java.lang.Integer</param-type> <param-value>40</param-value> </init-param> </init-params> </class-scheme> </view-filter> </view-scheme>
この例では、ビューはpartitioned-std
キャッシュ・サービスのパーティション・キャッシュを使用し、年齢40を超える顧客のエントリのみを含めます。
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
レプリケート・キャッシュ
例18-21では、replicated-scheme
要素を使用してクラスタ化キャッシュを定義します。このキャッシュでは、各キャッシュ・エントリのコピーがすべてのクラスタ・ノードに格納されます。
インメモリー・キャッシュサンプルを使用して、各クラスタ・ノードのキャッシュ記憶域を定義します。キャッシュのサイズは、JVMヒープが最小のクラスタ・ノードによってのみ制限されます。
例18-21 レプリケート・キャッシュの構成
<replicated-scheme> <scheme-name>SampleReplicatedScheme</scheme-name> <backing-map-scheme> <local-scheme> <scheme-ref>SampleMemoryScheme</scheme-ref> </local-scheme> </backing-map-scheme> </replicated-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)
オーバーフローが設定されたレプリケート・キャッシュ
backing-map-scheme
要素では、他のローカル・キャッシュのサンプルのいずれでも簡単に指定できます。たとえば、ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュを使用した場合は、クラスタ・ノードのそれぞれにローカル・オーバーフロー・キャッシュが設定され、より大量の記憶域容量を利用できます。
例18-22 オーバーフローが設定されたレプリケート・キャッシュの構成
<replicated-scheme> <scheme-name>SampleReplicatedOverflowScheme</scheme-name> <backing-map-scheme> <overflow-scheme> <scheme-ref>SampleOverflowScheme</scheme-ref> </overflow-scheme> </backing-map-scheme> </replicated-scheme>
親トピック: クラスタ・キャッシュ(複数のJVMからアクセス可能)