索引付け

MapIndexPlugin プラグインは、BackingMap 上にいくつかの索引を作成して、非キー・データ・アクセスをサポートするために使用します。

索引のタイプおよび構成

索引付けフィーチャーは、MapIndexPlugin プラグインと表されるか、または略して Index で表されます。Index は BackingMap プラグインです。BackingMap では、 各索引プラグインが索引構成規則に従っている限り、複数の索引プラグインを 構成できます。

索引付けフィーチャーは、1 つ以上の索引を BackingMap に 作成する場合に使用できます。1 つの索引は、BackingMap 内の 1 つのオブジェクトの 1 つの属性または属性のリストから作成されます。 このフィーチャーにより、アプリケーションはより迅速に特定のオブジェクトを見つけることができます。索引付けフィーチャーを使用すると、アプリケーションは特定の値を持つオブジェクトや、 ある範囲の索引属性値内にあるオブジェクトを見つけることができます。

可能な索引付けには、静的および動的という 2 つのタイプがあります。静的索引付けの場合、ObjectGrid インスタンスを初期化する前に、BackingMap に索引プラグインを構成する必要があります。この構成を行うには、BackingMap を XML で構成するか、またはプログラマチックに構成します。静的索引付けでは、まず最初に、ObjectGrid の初期化中に索引を作成します。索引は常に BackingMap に同期しており、いつでも使用できる準備ができています。静的索引付けプロセスが既に開始している場合、索引は、eXtreme Scale トランザクション管理プロセスの一環として保守されます。トランザクションが変更をコミットすると、 それらの変更は静的索引も更新し、トランザクションがロールバックされれば索引の変更もロールバック されます。

動的索引付けの場合は、索引を含む ObjectGrid インスタンスの初期化の前または後に、BackingMap に索引を作成することができます。動的索引付け プロセスのライフサイクルはアプリケーションによって制御されるので、不要になったら動的索引を削除 することができます。アプリケーションが動的索引を作成する場合は、 索引作成プロセスを完了するまでに時間がかかるために、その索引をすぐに使用できないことがあります。 この時間は索引付けされるデータの量に依存するので、 特定の索引付けイベントが発生したときにそのことを通知してもらいたいアプリケーション のために、DynamicIndexCallback インターフェースが提供されています。 これらのイベントには、準備完了、エラー、および破棄があります。 アプリケーションは、このコールバック・インターフェースを実装し、動的索引付けプロセスに登録できます。

BackingMap に索引プラグインが構成されている場合、対応する ObjectMap からアプリケーション索引プロキシー・オブジェクトを取得することができます。 ObjectMap の getIndex メソッドを呼び出し、索引プラグインの名前を渡すと、索引プロキシー・オブジェクトが戻されます。索引プロキシー・オブジェクトを適切なアプリケーション索引インターフェース (MapIndexMapRangeIndex、またはカスタマイズされた索引インターフェースなど) にキャストする必要があります。 索引プロキシー・オブジェクトを取得したら、アプリケーション索引インターフェースで定義されたメソッドを使用して、キャッシュされたオブジェクトを検出することができます。

次のリストに、索引付けの使用手順をまとめます。
  • 静的または動的索引プラグインを BackingMap に追加します。
  • ObjectMap の getIndex メソッドを発行して、アプリケーション索引プロキシー・オブジェクトを取得します。
  • MapIndex、MapRangeIndex またはカスタマイズされた索引インターフェースなどの適切なアプリケーション索引インターフェースに、索引プロキシー・オブジェクトをキャストします。
  • アプリケーション索引インターフェースで定義されたメソッドを使用して、キャッシュされたオブジェクトを検出します。

HashIndex クラスは、組み込みアプリケーション索引インターフェースである MapIndex と MapRangeIndex の両方をサポートすることのできる組み込み索引プラグイン実装です。ユーザー独自の索引を作成することも できます。HashIndex を静的索引または動的索引として BackingMap に追加して、MapIndex または MapRangeIndex の索引プロキシー・オブジェクトを取得し、その索引プロキシー・オブジェクトを使用してキャッシュ・オブジェクトを検索することができます。

デフォルトの索引

ローカル・マップ内のキーを反復処理する場合は、デフォルトの索引を 使用できます。この索引はまったく構成を必要としませんが、エージェントを使用するか ShardEvents.shardActivated(ObjectGrid shard) メソッドから 取得した ObjectGrid インスタンスを使用して、断片に対して使用しなければなりません。

データ品質に関する考慮事項

索引照会メソッドの結果が表わすのは、特定の時刻におけるデータのスナップショットのみです。結果がアプリケーションに 戻された後には、データ・エントリーに対するロックは取得されません。アプリケーションは、戻されたデータ・セットに対してデータ更新が 発生する可能性があることに注意する必要があります。例えば、アプリケーションは MapIndex の findAll メソッドを実行して、キャッシュされたオブジェクトのキーを取得します。戻されたこのキー・オブジェクトは、キャッシュ内のデータ項目 に関連付けられています。アプリケーションは、キー・オブジェクトを提供することにより、ObjectMap に対して get メソッドを実行して、オブジェクトを検出できるようになっている必要があります。get メソッドが呼び出される直前に、別のトランザクションが キャッシュからそのデータ・オブジェクトを削除した場合、 戻される結果はヌルです。

索引付けのパフォーマンスに関する考慮事項

索引付けフィーチャーの主な目的の 1 つは、BackingMap の全体的なパフォーマンスを改善することです。 索引付けの使い方が不適切な場合は、アプリケーションのパフォーマンスが低下する可能性があります。このフィーチャーを使用する前に、次の要因について検討します。
  • 並行書き込みトランザクションの数: 索引処理は、トランザクションが BackingMap にデータを書き込むたびに起こりえます。 アプリケーションが索引照会操作を試行しているときに、多くのトランザクションがデータをマップに書き込んでいると、パフォーマンスが低下します。
  • 照会操作で戻される結果セットのサイズ: 結果セットのサイズが大きくなるにつれて、 照会のパフォーマンスは低下します。 結果セットのサイズが BackingMap の 15% 以上になるとパフォーマンスは低下する傾向 にあります。
  • 同じ BackingMap に作成される索引の数: 各索引が システム・リソースを消費します。BackingMap に作成される索引の数が 増えると、パフォーマンスは低下します。

索引付け機能は、BackingMap パフォーマンスを 大幅に改善できることがあります。理想的なケースは、BackingMap の大部分の操作が読み取りであり、 照会の結果セットが BackingMap エントリーのわずかな割合に過ぎず、 ごく少数の索引が BackingMap に対して作成される場合です。