Coherenceのアーキテクチャはモジュールで構成されており、ほぼすべてのモジュールで拡張やカスタム実装との交換が可能です。これにはローカル記憶域も含まれます。ローカル記憶域は、Coherenceで管理されるデータを実際に保存またはキャッシュするデータ構造です。ローカル記憶域を提供するオブジェクトは、同じ標準のコレクション・インタフェースであるjava.util.Map
をサポートする必要があります。Coherenceのローカル記憶域の実装を使用して、レプリケートされたデータや分散データを保存する場合、その機能をバッキング・マップと呼びます。これは、Coherenceがローカル記憶域の実装によって実際に支援(バックアップ)されるためです。その他、ローカル記憶域の一般的な使用法としては、分散キャッシュの前に配置したり、分散キャッシュの後方でバックアップを行うことがあります。
通常、Coherenceでは、次のローカル記憶域の実装が使用されます。
セーフなHashMap: デフォルトのロスレス実装です。ロスレス実装には、JavaのHashtableクラス同様、サイズ制限も自動失効もありません。つまり、自身に含まれるキャッシュ項目を削除する(損失する)ことのない実装です。この特殊なHashMap
実装は、非常に高度なスレッドレベルの並行性にあわせて最適化されています(デフォルト実装にはcom.tangosol.util.SafeHashMap
クラスを、キャッシュ・イベントの送信が必要な実装にはcom.tangosol.util.ObservableHashMap
を使用します。これらの実装はスレッドセーフです)。
ローカル・キャッシュ: デフォルトのサイズ制限および自動失効の実装です。ローカル・キャッシュについては後で詳しく説明しますが、ここで覚えておくべき重要な点は、キャッシュ・サイズを制限できること、および一定期間後にキャッシュ項目を自動失効できることです(デフォルト実装にはcom.tangosol.net.cache.LocalCache
を使用します。この実装はスレッド・セーフであり、キャッシュ・イベント、com.tangosol.net.CacheLoader
、CacheStore
、および構成可能でプラッガブルなエビクション・ポリシーがサポートされます)。
書込み/読取りバッキング・マップ: キャッシュ・ミス時にデータベースからロードされるキャッシュのデフォルトのバッキング・マップ実装です。読取り専用キャッシュとして構成するか(コンシューマ・モデル)、ライトスルー・キャッシュまたはライトビハインド・キャッシュとして構成できます(コンシューマ/プロデューサ・モデル)。ライトスルーおよびライトビハインド・モードは、分散キャッシュ・サービスで使用することのみを目的としています。ニア・キャッシュとともに使用する場合、ニア・キャッシュと分散キャッシュの同期を維持する必要があるのであれば、(ニア・キャッシュを無効化する目的で)このバッキング・マップをSeppukuベースのニア・キャッシュと組み合せて使用できます。ただし、これらの要件を考慮する場合はバージョニングされた実装を使用することをお薦めします (デフォルト実装にはcom.tangosol.net.cache.ReadWriteBackingMap
クラスを使用します)。
バイナリ・マップ(Java NIO): 自身の情報をメモリー内(ただしJavaヒープ外)に保存したり、メモリー・マップ・ファイルにも保存できるバッキング・マップ実装です。つまり、Javaヒープ・サイズには影響せず、アプリケーションの一時停止の原因となり得る関連したJVMガベージ・コレクションのパフォーマンスにも影響しないことを意味します。この実装はまた、分散キャッシュのバックアップにも使用できます。これは高可用性を実現するためにバックアップを必要とする、読取り専用(または読取りを主体とする)キャッシュで特に有用です。このバックアップがJavaヒープ・サイズに影響しないにもかかわらず、フェイルオーバー時には瞬時に使用できるためです。
シリアライズ・マップ: そのデータをディスクに保存可能な形式(シリアライズ形式)に変換するバッキング・マップ実装です。シリアル形式のデータの保存先とするcom.tangosol.io.BinaryStore
オブジェクトが別に必要になります。通常、これは組込みのLHディスク・ストア実装ですが、シリアライズ・マップ実装では、BinaryStore
のあらゆるカスタム実装をサポートしています(シリアライズ・マップのデフォルト実装にはcom.tangosol.net.cache.SerializationMap
を使用します)。
シリアライズ・キャッシュ: LRUエビクション・ポリシーをサポートするSerializationMapの拡張機能です。たとえば、シリアライズ・キャッシュではディスク・ファイルのサイズを制限できます(シリアライズ・キャッシュのデフォルト実装にはcom.tangosol.net.cache.SerializationCache
を使用します)。
オーバーフロー・マップ: オーバーフロー・マップでは実際には記録域は提供されません。この項で取り上げる理由は、このマップによって、2つのローカル記憶域実装を結合し、最初の記憶域がいっぱいになったときに、2番目の記憶域にデータをオーバーフローさせて保存できるためです(OverflowMap
のデフォルト実装にはcom.tangosol.net.cache.OverflowMap
を使用します)。