Coherence C#およびC++ APIの使用の詳細は、Oracle Coherenceリモート・クライアントの開発のExtendクライアントAPIを参照してください。
この章の内容は次のとおりです。
親トピック: データ・グリッド操作の実行
SessionインタフェースおよびCacheFactoryクラスの理解
Session
インタフェースおよびCacheFactory
クラスは、Coherenceアプリケーションの主要なエントリ・ポイントです。どちらのAPIもNamedCache
インタフェースの管理に使用され、キャッシュ・インスタンスの作成、リリースおよびデストロイに最もよく使用されます。キャッシュ・インスタンスの取得を参照してください。
NamedCacheインタフェースの理解
NamedCache
は、クラスタのメンバー間で共有されるリソースを保持するMap
実装です。リソースはメモリー内で管理する必要があり、通常は、多くの場合データベースに恒久的に保存されるデータ、または大幅なコストでアセンブルまたは計算されたデータから構成されます。
NamedCache
インタフェースでは、キャッシュ操作を実行するための多くのメソッドが提供され、キャッシュの問合せ、キャッシュ・エントリの処理、キャッシュ・イベントのリスナーの登録、キャッシュ・エントリへの同時アクセスの制御の機能を追加する、様々なマップ操作を拡張します。
AsyncNamedCache
インタフェースは、非同期バージョンのNamedCache
インタフェースです。インタフェースでは、CompleteableFuture
APIをJava java.util.concurrent
パッケージから使用し、キャッシュ操作を非同期に実行します。
基本的なキャッシュ操作の実行を参照してください。
問合せ用API
QueryMap
インタフェースでは、キャッシュ・エントリから抽出される値で動作する様々なフィルタを使用してキャッシュを問い合せることができます。インタフェースでは、索引の追加と削除も可能です。索引は、キャッシュに格納されている値と、対応するキーの関連付けに使用され、パフォーマンスを大幅に向上できます。キャッシュ内のデータの問合せを参照してください。
キャッシュ処理用API
InvocableMap
インタフェースでは、キャッシュでのエントリ別処理と集計操作の両方を起動できます。キャッシュの内容に対する操作は、キャッシュによって(したがって、特定の領域に制限されたキャッシュの内容の中で)実行できます。この機能は特に分散環境で役立ちます。これは、処理対象のエントリが管理されている場所に処理を移すことで、処理を局所化して効率を高めることができるためです。
入力プロセッサは、キャッシュ内のエントリ・オブジェクトに対して作動するエージェントです。Coherenceには、一般的な多くの操作の実行に使用可能な、事前定義済の多くのエントリ・プロセッサが用意されています。プロセッサはcom.tangosol.util.processor
パッケージに定義されています。
エントリ・アグリゲータは、エントリの一部のサブセットに対して実行し、集計結果を得るように指定できる処理を表します。集計の一般的な例として、最小、最大、合計、平均などの関数があります。ただし、集計の概念は、エントリのグループを評価して1つの答えを算出する必要のある任意のプロセスに適用されます。集計は、分散環境でパラレルに実行する機能を明示的に備えています。
キャッシュ内のデータの処理を参照してください。
イベント用API
Coherenceでは、イベントを処理するための2つのプログラミング・モデルがあります。ObservableMap
インタフェースは、キャッシュの内容が変更されたときにアプリケーションがイベントを受信できるようにします。変更イベントに関心があることを登録するには、そのキャッシュに対するListener
実装をアプリケーションで追加します。対象キャッシュでは、イベント・タイプ(挿入、更新、削除)、変更されたエントリのキー、およびエントリの古い値と新しい値などに関する情報を含むイベントが受信されます。(マップ・イベントの使用を参照してください)。
ライブ・イベント・モデルは、イベント・インターセプタを使用して、クラスタ内で発生する特定のイベントをリスニングします。インターセプタは、イベント・タイプごとに作成され、連鎖できます。イベント・タイプは、パーティション・キャッシュとサーバー・イベント、ライフサイクル・イベントおよびフェデレーテッド・キャッシュ・イベントに定義されます。ライブ・イベントの使用を参照してください。
トランザクション用API
Coherenceには、様々なトランザクションの保証が得られる各種のトランザクション・オプションが用意されています。ConcurrentMap
APIは、明示的なロックを提供するロックAPIです。エントリ・プロセッサでは、ロック・フリーなプログラム・モデルも提供されるため、競合や待機時間が最小限に抑えられ、データ操作のフォルト・トレランスを犠牲にすることなく、システム・スループットを向上させます。最後に、トランザクション・フレームワークAPIは接続ベースのAPIで、これにより、クライアントに障害が発生した場合でも、パーティションおよびキャッシュ全体にわたって原子性トランザクションが保証されます。トランザクションの実行を参照してください。
Coherenceのシリアライズ
Coherenceは値オブジェクトをキャッシュします。これらのオブジェクトは、(セッション・データや一時データなどの)内部ソースのデータ、または(データベースやメインフレームなどの)外部ソースのデータのいずれでもかまいません。
キャッシュに配置されたオブジェクトはシリアライズ可能である必要があります。シリアライズは、多くの場合、クラスタ化されたデータ管理における最も費用を要する部分になるため、Coherenceではデータのシリアライズ/デシリアライズ用に様々なオプションを用意しています。
com.tangosol.io.pof.PofSerializer
- Portable Object Format (POF)は言語に依存しないバイナリ形式です。POFは領域と時間の両面で効率を向上させるように設計された、Coherenceの推奨シリアライズ・オプションです。Portable Object Formatの使用を参照してください
java.io.Serializable
- 最も単純で処理の遅いオプション。
java.io.Externalizable
- このオプションでは、開発者が手動でシリアライズを実装する必要がありますが、パフォーマンスの大幅な向上が見込めます。java.io.Serializable
と比較して、シリアライズされたデータのサイズを2倍以上削減できます。データ・サイズが小さくなると、一般にシリアライズされた形式でデータがキャッシュされるため、特に分散キャッシュで役に立ちます。最も重要なのは、CPU使用率が劇的に削減されるということです。
com.tangosol.io.ExternalizableLite
- このオプションはjava.io.Externalizable
と非常によく似ていますが、より効率的なI/Oストリームの実装を使用することで、パフォーマンスの向上とメモリー使用量の削減を図れます。
com.tangosol.run.xml.XmlBean
– ExternalizableLite
のデフォルトの実装です。
ノート:
オブジェクトをシリアライズする場合は、Javaのシリアライズ機能によって、すべての参照可能オブジェクトが自動的に(Map
やList
などのコレクションを含むオブジェクト参照を使用して)クロールされます。したがって、キャッシュされたオブジェクトは親オブジェクトを直接参照してはなりません(整数のような特定の値を保持することは許されます)。独自のシリアライズ・ルーチンを実装するオブジェクトは影響を受けません。
親トピック: Coherenceプログラミングの概要
Javaジェネリクスのサポートに加えて、Coherenceでは、NamedCache
インスタンスを作成する場合、またはキャッシュ構成ファイルにキャッシュを定義する場合に、型を明示的に構成できます。NameCache型チェックの使用を参照してください。
ノート:
このマニュアルの例は、ジェネリクスを使用するように記述できません。ただし、Coherence APIでプログラミングする場合は、ジェネリクスの使用が標準的なアプローチであることが求められます。
親トピック: Coherenceプログラミングの概要
ラムダ
Javaラムダ実装では、コードを引数として渡し、結果として返すことを可能にする一定レベルの関数型プログラミングが可能です。ラムダは、関数型インタフェース(単一の抽象メソッドが含まれるインタフェース)を操作する場合に、匿名の内部クラスのかわりによく使用されます。ラムダ式での使用に最適な、既存の多くの関数型インタフェースがあります。新しい汎用関数型インタフェース(例: Function
、Predicate
、Supplier
、Consumer
など)もあり、これらも同様に便利です。
多くのCoherenceインタフェースは、ラムダ式で使用可能な関数型インタフェースであり、このガイド全体で示されています。Coherenceでの最も一般的なラムダ式の使用は、値の抽出、エントリの問合せとフィルタ、およびエントリの処理です。Oracle Coherenceのインストールのラムダ式を使用したエントリの処理およびCoherence Java 8機能のサンプルを参照してください。
Javaのラムダが初めての場合は、次のリソースを参照してください。
ストリーム
Javaストリーム実装では、マルチ・コア・アーキテクチャを利用するために、データの問合せと処理を順次またはパラレルに実行する効率的な方法を提供します。処理は次のステップで実行されます。
データは、ソース(コレクションや配列など)から読取り専用ストリームに集計されます。ストリームは、オブジェクト参照を表し、実際はデータを格納しません。
次に、中間操作がストリームで宣言されます。フィルタリング、ソート、マッピングなどの中間操作がサポートされます。ラムダ式は、中間操作の宣言時に多く使用され、データを機能的に操作します。中間操作は集計されて連鎖可能になり、後続の各操作は、前の操作の結果が含まれるストリームで実行されます。中間操作は遅延し、最終的な終端操作が実行されるまで実際に実行されません。
最終的な終端操作が宣言されます。カウント、追加、平均などの終端操作がサポートされています。終端操作は、ストリームのオブジェクトを自動的に反復処理し、集計結果を返します。
Javaストリームでは、Coherenceデータ・グリッド集計と同様の機能を提供します。ただし、分散環境で実行した場合、ストリームは効率的ではなくなります。ストリーム・プログラミング・モデルを活用し、さらにストリームをクラスタ間でリモートで実行できるようにするために、Coherenceではcom.tangosol.util.stream
およびcom.tangosol.internal.util.stream
パッケージのStreams APIを拡張しています。
Oracle Coherenceのインストールのストリームを使用したデータ・グリッドの集計の実行およびCoherence Java 8機能のサンプルを参照してください。
ストリームが初めての場合は、次のリソースを参照してください。
デフォルトのメソッド
Javaデフォルト・メソッド実装では、インタフェースの既存の実装を更新する必要なく、新いメソッドを既存のインタフェースに追加する方法を提供します。新しいメソッドは、default
キーワードを使用してインタフェースに追加されます。既存の実装では、デフォルト・メソッドをインタフェースに定義済として使用する、新しい実装が必要となるようにメソッドを抽象として再宣言する、またはデフォルトの実装を新しい実装でオーバーライドするように選択できます。デフォルト・メソッドは、ラムダ式を既存のインタフェースに対するパラメータとして受け入れるメソッドを追加する場合に使用することもできます。
java.util.Map
インタフェースは、エントリのマージやすべてのエントリの置換などの機能を追加するデフォルト・メソッドが含まれるように更新されています。Coherenceアプリケーションでは、NamedCache
インタフェースを介してこれらのメソッドを利用できますが、デフォルト・メソッド実装では、データ局所性を前提とし、スレッド・セーフでもクラスタ・セーフでもありません。このため、デフォルト・メソッドは、ラムダ式を活用したエントリ・プロセッサを使用して再実装されています。
Oracle Coherenceのインストールのデフォルトのマップ操作の使用およびCoherence Java 8機能のサンプルを参照してください。
デフォルト・メソッドが初めての場合は、次のリソースを参照してください。
親トピック: Coherenceプログラミングの概要