プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceでのアプリケーションの開発
12c (12.2.1.1)
E77322-02
目次へ移動
目次

前
次

17 キャッシュの構成例

この章では、一連の基本的なキャッシュ・スキーム定義について説明します。これらの定義は必要に応じて使用または変更できます。キャッシュの構成方法の詳細は、キャッシュの構成を参照してください。また、この章で紹介するサンプルのビルドは相互に依存しており、他のサンプルをネスト・スキームとして再使用する際は、多くの場合<scheme-ref>要素が使用されます。<scheme-ref>要素の使用方法の詳細は、スキームの継承の使用方法を参照してください。紹介するサンプルでは、最小数の設定のみを指定しています。すべてのオプションを参照するには、スキームのドキュメントへの埋込みリンクを使用してください。

この章の構成は、次のとおりです。

17.1 ローカル・キャッシュ(単一のJVMからアクセス可能)

この項では、一連のローカル・キャッシュ・スキームを定義します。ここでいうローカルとは、キャッシュに直接アクセスできるJVMが1つのみであることを意味します。このドキュメントの後述部分で、ローカル・キャッシュはクラスタ化キャッシュの構成要素として使用されます。クラスタ化キャッシュ(複数のJVMからアクセス可能)を参照してください。

この項では、次の項目について説明します。

17.1.1 インメモリー・キャッシュ

例17-1では、local-schemeを使用して、インメモリー・キャッシュを定義します。キャッシュには、JVMヒープで可能なかぎりの容量が保存されます。

例17-1 ローカルのインメモリー・キャッシュの構成

<local-scheme>
   <scheme-name>SampleMemoryScheme</scheme-name>
</local-scheme>

17.1.2 サイズ制限があるインメモリー・キャッシュ

<local-scheme><high-units>サブ要素を追加すると、キャッシュのサイズが制限されます。この例では、キャッシュのサイズが1000エントリに制限されます。制限を超えると、スキームの<eviction-policy>によって、キャッシュからの削除対象となる要素が決定されます。

例17-2 サイズ制限があるインメモリー・ローカル・キャッシュの構成

<local-scheme>
   <scheme-name>SampleMemoryLimitedScheme</scheme-name>
   <high-units>1000</high-units>
</local-scheme>

17.1.3 エントリの期限切れが設定されたインメモリー・キャッシュ

<local-scheme>に<expiry-delay>サブ要素を追加すると、指定した期間内に更新されなかったキャッシュ・エントリが自動的に期限切れになります。期限切れになるとそのエントリは無効化され、キャッシュから削除されます。

例17-3 エントリの期限切れが設定されたインメモリー・キャッシュの構成

<local-scheme>
   <scheme-name>SampleMemoryExpirationScheme</scheme-name>
   <expiry-delay>5m</expiry-delay>
</local-scheme>

17.1.4 ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュ

例17-4では、overflow-schemeを使用して、サイズが制限されたインメモリー・キャッシュを定義します。インメモリー(<front-scheme>)のサイズの上限に達すると、キャッシュの内容の一部がディスク(<back-scheme>)に移動されます。front-schemeの<eviction-policy>によって、フロントからバックへの移動対象となる要素が決定されます。

この例では、キャッシュのフロントおよびバックの実装にサイズ制限があるオンディスク・キャッシュおよびオンディスク・キャッシュの例が再利用されています。

例17-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>

17.1.5 オンディスク・キャッシュ

例17-5では、external-schemeを使用して、オンディスク・キャッシュを定義します。

注意:

この例では、bdb-store-manager (Berkeley Database)を使用して、そのオンディスク記憶域を実装します。これ以外の外部記憶域オプションについては、「external-scheme」を参照してください。

例17-5 オンディスク・キャッシュを定義する構成

<external-scheme>
  <scheme-name>SampleDiskScheme</scheme-name>
  <bdb-store-manager/>
</external-scheme>

17.1.6 サイズ制限があるオンディスク・キャッシュ

external-scheme<high-units>サブ要素を追加すると、キャッシュのサイズが制限されます。この例では、キャッシュのサイズが100万エントリに制限されます。制限を超えると、LRUエビクションが使用され、キャッシュからの削除対象となる要素が決定されます。これ以外のサイズ制限がある外部キャッシング方法については、paged-external-schemeを参照してください。

例17-6 サイズ制限があるオンディスク・キャッシュの構成

<external-scheme>
  <scheme-name>SampleDiskLimitedScheme</scheme-name>
  <bdb-store-manager/>
  <high-units>1000000</high-units>
</external-scheme>

17.1.7 オンディスク永続キャッシュ

例17-7では、external-schemeを使用して、単一のJVMの長期記憶域としての使用に適したキャッシュを実装します。

外部キャッシュは一般的に、大きなデータ・セットの一時記憶域に使用され、JVMのシャットダウン時に自動的に削除されます。bdb-store-managerストレージ・マネージャを使用した場合は、非クラスタ化キャッシュで外部キャッシュを長期記憶域として使用できます(永続性(長期記憶域)を参照)。クラスタ化の永続性については、データベースのパーティション・キャッシュにあるサンプルを参照してください。

データが格納されるファイルの名前を指定するには、{cache-name}マクロを使用します。このマクロの詳細は、パラメータ・マクロの使用方法を参照してください。

例17-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>

17.1.8 データベースのキャッシュ

例17-8では、read-write-backing-map-schemeを使用して、データベースのキャッシュを定義します。このスキームでは、データベースの内容の一部であるローカル・キャッシュが保持されます。キャッシュ・ミスによってデータベース全体が読み取られ、元のデータベースにキャッシュが書き込まれます。

cachestore-scheme要素は、com.tangosol.net.cache.CacheLoaderまたはcom.tangosol.net.cache.CacheStoreのいずれかのインタフェースを実装するカスタム・クラスによって構成されます。このクラスは、キャッシュ・エントリの読取りや書込みなど、データベースに対するすべての操作を担当します。キャッシュ・ストアの書込みの例については、キャッシュ・ストアの実装のサンプルを参照してください。

キャッシュ・ストアの実装に対して、バッキングされるキャッシュの名前を通知するには、{cache-name}マクロを使用します。このマクロの詳細は、パラメータ・マクロの使用方法を参照してください。

例17-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>

17.2 クラスタ化キャッシュ(複数のJVMからアクセス可能)

この項では、一連のクラスタ化キャッシュのサンプルを定義します。クラスタ化キャッシュは、複数のJVM(同じキャッシュ・サービスを実行する任意のクラスタ・ノード)からアクセスできます。各クラスタ・ノード上の内部キャッシュ記憶域(backing-map)は、ローカル・キャッシュを使用して定義します(ローカル・キャッシュ(単一のJVMからアクセス可能)を参照)。キャッシュ・サービスには、他のクラスタ・ノードのローカル・キャッシュにアクセスする機能があります。

この項では、次の項目について説明します。

17.2.1 パーティション・キャッシュ

例17-9では、distributed-schemeを使用して、クラスタ化キャッシュを定義します。このキャッシュでは、キャッシュ記憶域がクラスタ・ノード全体にわたってパーティション化されます。

インメモリー・キャッシュを使用して、各クラスタ・ノードのキャッシュ記憶域を定義します。キャッシュの記憶域の合計容量は、パーティション・キャッシュ・サービスを実行する、記憶域が有効なクラスタ・ノードの合計です。distributed-scheme<local-storage> サブ要素を参照してください。

例17-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>

17.2.2 オーバーフローが設定されたパーティション・キャッシュ

backing-map-scheme要素では、スキーム参照を使用して、他のローカル・キャッシュの任意のサンプルを指定できます。たとえば、ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュを使用した場合は、記憶域が有効なクラスタ・ノードのそれぞれにローカル・オーバーフロー・キャッシュが設定され、より大量の記憶域容量を利用できます。キャッシュのバックアップ記憶域も同じオーバーフロー・スキームを使用するため、バックアップ・データをディスクにオーバーフローできます。

例17-10 オーバーフローが設定されたパーティション・キャッシュの構成

<distributed-scheme>
  <scheme-name>SamplePartitionedOverflowScheme</scheme-name>
  <backing-map-scheme>
    <overflow-scheme>
      <scheme-ref>SampleOverflowScheme</scheme-ref>
    </overflow-scheme>
  </backing-map-scheme>
  <backup-storage>
    <type>scheme</type>
    <scheme-name>SampleOverflowScheme</scheme-name>
  </backup-storage>
</distributed-scheme>

17.2.3 ジャーナル記憶域が設定されたパーティション・キャッシュ

例17-11では、backing-map-scheme要素を使用して、バッキング・マップにRAMジャーナルを使用するパーティション・キャッシュを定義します。RAMジャーナルは、構成されたメモリー・サイズを超えると、自動的にフラッシュ・ジャーナルに委任します。RAMジャーナルおよびフラッシュ・ジャーナルの構成の詳細は、ジャーナル・スキームの定義を参照してください。

例17-11 RAMジャーナルが設定されたパーティション・キャッシュの構成

<distributed-scheme>
   <scheme-name>SamplePartitionedJournalScheme</scheme-name>
      <backing-map-scheme>
         <ramjournal-scheme/>
      </backing-map-scheme>
   <autostart>true</autostart>
</distributed-scheme>

例17-12では、バッキング・マップにフラッシュ・ジャーナルを直接使用するパーティション・キャッシュを定義します。

例17-12 フラッシュ・ジャーナルが設定されたパーティション・キャッシュの構成

<distributed-scheme>
   <scheme-name>SamplePartitionedJournalScheme</scheme-name>
      <backing-map-scheme>
         <flashjournal-scheme/>
      </backing-map-scheme>
   <autostart>true</autostart>
</distributed-scheme>

17.2.4 データベースのパーティション・キャッシュ

backing-map-scheme要素を切り替えてread-write-backing-map-schemeを使用すると、キャッシュでの、データベースなどの外部ソースに対するエントリのロードおよび格納が可能になります。

例17-13では、データベースのキャッシュを再利用して、データベース・アクセスを定義しています。

例17-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>

17.2.5 シリアライザが設定されたパーティション・キャッシュ

例17-14では、distributed-schemeのシリアライザ要素を使用して、ユーザー定義型のシリアライズおよびデシリアライズに使用されるシリアライザを定義します。この場合、パーティション・キャッシュはPOF (ConfigurablePofContext)をシリアライズ形式として使用します。POFを使用し、アプリケーションでカスタムのユーザー定義型クラスを使用する場合は、そのクラス用にカスタムのPOF構成も定義する必要があります。POFの要素の詳細は、POFユーザー定義型の構成要素を参照してください。

例17-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デプロイメント・ディスクリプタで定義されるシリアライザも参照できます。

例17-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デプロイメント・ディスクリプタで定義されたシリアライザを参照することもできます。

例17-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>
   ...

17.2.6 ニア・キャッシュ

例17-17では、near-schemeを使用して、パーティション・キャッシュのサブセットのローカル・インメモリー・キャッシュを定義します。この定義によって、パーティション・キャッシュにアクセスするクラスタ・ノードに、アクセス頻度の高い要素のローカル・コピーが保持されます。その結果、読取りパフォーマンスはreplicated-schemeベースのキャッシュに近づき、distributed-schemeベースのキャッシュと同様の高いスケーラビリティも得られます。

ニア(<front-scheme>)キャッシュの定義にはサイズ制限があるインメモリー・キャッシュのサンプルが再利用され、near-schemeの定義にはパーティション・キャッシュのサンプルが再利用されます。

front-schemeのサイズ制限付きの構成によって、back-schemeキャッシュがローカルにキャッシュされる量の制限が指定されます。

例17-17 パーティション・キャッシュのローカル・キャッシュの構成

<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>

17.2.7 レプリケート・キャッシュ

例17-18では、replicated-scheme要素を使用してクラスタ化キャッシュを定義します。このキャッシュでは、各キャッシュ・エントリのコピーがすべてのクラスタ・ノードに格納されます。

インメモリー・キャッシュのサンプルを使用して、各クラスタ・ノードのキャッシュ記憶域を定義します。キャッシュのサイズは、JVMヒープが最小のクラスタ・ノードによってのみ制限されます。

例17-18 レプリケート・キャッシュの構成

<replicated-scheme>
  <scheme-name>SampleReplicatedScheme</scheme-name>
  <backing-map-scheme>
    <local-scheme>
      <scheme-ref>SampleMemoryScheme</scheme-ref>
    </local-scheme>
  </backing-map-scheme>
</replicated-scheme>

17.2.8 オーバーフローが設定されたレプリケート・キャッシュ

backing-map-scheme要素では、他のローカル・キャッシュのサンプルのいずれでも簡単に指定できます。たとえば、ディスク・ベースのオーバーフローが設定されたインメモリー・キャッシュを使用した場合は、クラスタ・ノードのそれぞれにローカル・オーバーフロー・キャッシュが設定され、より大量の記憶域容量を利用できます。

例17-19 オーバーフローが設定されたレプリケート・キャッシュの構成

<replicated-scheme>
  <scheme-name>SampleReplicatedOverflowScheme</scheme-name>
  <backing-map-scheme>
     <overflow-scheme>
        <scheme-ref>SampleOverflowScheme</scheme-ref>
     </overflow-scheme>
  </backing-map-scheme>
</replicated-scheme>