各 ObjectGrid インスタンスは、BackingMap オブジェクトのコレクションを含みます。
各 BackingMap を指定したり ObjectGrid インスタンスに追加したりするには、ObjectGrid インターフェースの defineMap メソッド
または createMap メソッドをそれぞれ使用します。これらのメソッドは BackingMap インスタンスを戻し、このインスタンスは個々の Map の振る舞いを定義するために使用されます。
BackingMap は、個々のマップのためにコミットされたデータのメモリー内キャッシュとみなすことができます。
Session インターフェース
Session インターフェースを使用して
トランザクションを開始し、アプリケーションと BackingMap オブジェクト間のトランザクション対話を実行するのに必要な ObjectMap または JavaMap を取得します。
ただし、トランザクションの変更は、トランザクションがコミットされるまで、BackingMap オブジェクトに適用されません。
BackingMap は、個々のマップのためにコミットされたデータのメモリー内キャッシュとみなすことができます。
詳しくは、セッションを使用したグリッド内データへのアクセスを参照してください。
BackingMap i インターフェースは、BackingMap 属性を設定するためのメソッドを提供します。 一部の set メソッドを使用して、いくつかのカスタム設計されたプラグインを介して BackingMap を拡張できます。
以下は、属性を設定する set メソッド、およびカスタム設計されたプラグインをサポートする set メソッドのリストです。
// For setting BackingMap attributes.
public void setReadOnly(boolean readOnlyEnabled);
public void setNullValuesSupported(boolean nullValuesSupported);
public void setLockStrategy( LockStrategy lockStrategy );
public void setCopyMode(CopyMode mode, Class valueInterface);
public void setCopyKey(boolean b);
public void setNumberOfBuckets(int numBuckets);
public void setNumberOfLockBuckets(int numBuckets);
public void setLockTimeout(int seconds);
public void setTimeToLive(int seconds);
public void setTtlEvictorType(TTLType type);
public void setEvictionTriggers(String evictionTriggers);
// For setting an optional custom plug-in provided by application.
public abstract void setObjectTransformer(ObjectTransformer t);
public abstract void setOptimisticCallback(OptimisticCallback checker);
public abstract void setLoader(Loader loader);
public abstract void setPreloadMode(boolean async);
public abstract void setEvictor(Evictor e);
public void setMapEventListeners( List /*MapEventListener*/ eventListenerList );
public void addMapEventListener(MapEventListener eventListener );
public void removeMapEventListener(MapEventListener eventListener );
public void addMapIndexPlugin(MapIndexPlugin index);
public void setMapIndexPlugins(List /¥* MapIndexPlugin ¥*/ indexList );
public void createDynamicIndex(String name, boolean isRangeIndex,
String attributeName, DynamicIndexCallback cb);
public void createDynamicIndex(MapIndexPlugin index, DynamicIndexCallback cb);
public void removeDynamicIndex(String name);
リストされている各 set メソッドには、
対応する get メソッドが存在します。
BackingMap 属性
各 BackingMap には、BackingMap の振る舞いを変更または制御するために設定可能な以下の属性があります。
- ReadOnly: この属性は、Map を読み取り専用か、読み取り/書き込み可能のいずれにするかを示します。この属性が Map に設定されていない場合は、Map は読み取り/書き込み Map にデフォルトで設定されています。
BackingMap が読み取り専用で設定されている場合、ObjectGrid は可能な場合のみ読み取りのパフォーマンスを最適化します。
- NullValuesSupported: この属性は、Map でヌル値を使用できるようにするかどうかを示します。この属性が設定されていない場合は、Map はヌル値をサポートしません。
Map がヌル値をサポートする場合は、ヌルを戻す get 操作は、値がヌルであること、またはマップが get 操作によって指定されたキーを含まないことを意味します。
- LockStrategy: この属性は、この BackingMap でロック・マネージャーを使用するかどうかを示します。ロック・マネージャーを使用している場合は、LockStrategy 属性を使用して、マップ・エントリーのロッキングに
オプティミスティック・ロッキングまたはペシミスティック・ロッキングのいずれの方法が使用されているか示します。
この属性が設定されていない場合は、オプティミスティック LockStrategy が使用されます。
サポートされているロック・ストラテジーについて詳しくは、ロックのトピックを参照してください。
- CopyMode: この属性は、マップから値が読み取られた場合、またはトランザクションのコミット・サイクル中に BackingMap に値が入れられた場合に、値オブジェクトのコピーが BackingMap によって作成されるかどうかを決定します。さまざまなコピー・モードがサポートされて、アプリケーションが
パフォーマンスとデータ保全性の間でトレードオフを行うことを可能にします。
この属性が設定されていない場合は、COPY_ON_READ_AND_COMMIT コピー・モードが使用されます。
このコピー・モードでは、最良のパフォーマンスが上げられませんが、
データ保全性の問題に対しては、最大限の保護が得られます。
BackingMap が EntityManager API エンティティーに関連付けられている場合、CopyMode の設定は、
値が COPY_TO_BYTES に設定されている場合を除いて、効力はありません。他の CopyMode が
設定されている場合は、常に NO_COPY に設定されます。エンティティー・マップの CopyMode をオーバーライドするには、ObjectMap.setCopyMode メソッドを使用します。コピー・モードについて詳しくは、コピー・モードのチューニングを参照してください。
- CopyKey: この属性は、先にマップ内にエントリーが作成されたときに、BackingMap でキー・オブジェクトの
コピーを作成するかどうかを決定します。キーは通常変更不可能なオブジェクトであるため、デフォルトのアクション
では、キー・オブジェクトのコピーは作成されません。
- NumberOfBuckets: この属性は、BackingMap で使用するハッシュ・バケット数を示します。BackingMap 実装は、その実装のためにハッシュ・マップを使用します。 BackingMap に多くのエントリーがある場合、バケットが多いほどパフォーマンスが良好であることを意味します。
同じバケットを持つキーの数は、バケット数が増えるにつれて少なくなります。
また、バケットを増やすことによって、並行性も増大します。
この属性は、パフォーマンスを微調整する際に便利です。
アプリケーションで NumberOfBuckets 属性が設定されない場合は、未定義のデフォルト値が使用されます。
- NumberOfLockBuckets: この属性は、この BackingMap のロック・マネージャーが使用するロック・バケット数を示します。LockStrategy が OPTIMISTIC または PESSIMISTIC に設定されると、BackingMap にロック・マネージャーが作成されます。
ロック・マネージャーは、ハッシュ・マップを使用して、1 つ以上のトランザクションによってロックされるエントリーを追跡します。
ハッシュ・マップに多くのエントリーがある場合は、同じバケットについて衝突するキーの数が
バケット数が増えるほど減少するため、ロック・バケットの数が多いほどパフォーマンスが良好になります。
また、ロック・バケットが多いと並行性も高くなります。
LockStrategy 属性が NONE に設定されると、この BackingMap はロック・マネージャーを使用しません。
この場合、numberOfLockBuckets を設定しても効果はありません。
この属性を設定しない場合は、未定義の値が使用されます。
- LockTimeout: この属性は、BackingMap がロック・マネージャーを使用しているときに使用されます。LockStrategy 属性が OPTIMISTIC または PESSIMISTIC のいずれかに設定されている場合、BackingMap はロック・マネージャーを使用します。
属性値は、ロック・マネージャーがロックが与えられるまで待機する時間を秒単位で決定します。
この属性が設定されない場合は、LockTimeout 値として 15 秒が使用されます。
発生するロック待機タイムアウト例外について詳しくは、『ペシミスティック・ロック』を参照してください。
- TtlEvictorType: 各 BackingMap には、
時間ベースのアルゴリズムを使用して除去対象となるマップ・エントリーを判別する、組み込み型存続時間 Evictor があります。デフォルトでは、組み込み型存続時間 Evictor はアクティブではありません。
以下の値 (CREATION_TIME、LAST_ACCESS_TIME、LAST_UPDATE_TIME、または NONE) のうちの 1 つを使用して、setTtlEvictorType メソッドを呼び出すと、存続時間 Evictor をアクティブにできます。CREATION_TIME の値は、Evictor が、TimeToLive 属性を、マップ・エントリーが BackingMap で作成された時間に追加して、
Evictor が BackingMap からマップ・エントリーを除去する時点を判別することを意味します。
LAST_ACCESS_TIME (または LAST_UPDATE_TIME) の値は、アプリケーションが稼働している何らかのトランザクションによってマップ・エントリーが最後にアクセスを受けた (またはアクセスを受け、かつ 更新された) 時間に、Evictor が TimeToLive 属性を追加して、マップ・エントリーを除去する時点を判別することを示します。TimeToLive 属性によって指定される期間に、マップ・エントリーがトランザクションのアクセスを受けない場合にのみ、マップ・エントリーは除去されます。
値 NONE は、Evictor が非アクティブなままで、マップ・エントリーを除去しないことを示します。
この属性が設定されないと、NONE はデフォルトとして使用され、存続時間 Evictor はアクティブになりません。
組み込み型存続時間 Evictor について詳しくは、『Evictor』を参照してください。
- TimeToLive: TtlEvictorType 属性で説明したように、組み込み型存続時間 Evictor によって
各エントリーの作成時または最後のアクセス時に追加する必要がある秒数をこの属性を使用して指定します。この属性が設定されていない場合は、特殊値ゼロを使用して、存続時間が無限大であることを示します。
この属性が無限大に設定されると、マップ・エントリーは Evictor によって除去されません。
以下の例は、someGrid ObjectGrid インスタンスでの someMap BackingMap の定義方法および BackingMap インターフェースの set メソッドを使用した BackingMap のさまざまな属性の設定方法を示しています。
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.LockStrategy;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
...
ObjectGrid og =
ObjectGridManagerFactory.getObjectGridManager().createObjectGrid("someGrid");
BackingMap bm = objectGrid.getMap("someMap");
bm.setReadOnly( true ); // override default of read/write
bm.setNullValuesSupported(false); // override default of allowing Null values
bm.setLockStrategy( LockStrategy.PESSIMISTIC ); // override default of OPTIMISTIC
bm.setLockTimeout( 60 ); // override default of 15 seconds.
bm.setNumberOfBuckets(251); // override default (prime numbers work best)
bm.setNumberOfLockBuckets(251); // override default (prime numbers work best)
BackingMap プラグイン
BackingMap インターフェースには、ObjectGrid とより拡張性のある対話を行うためのオプションのプラグ・ポイントが複数あります。
- ObjectTransformer プラグイン: 一部のマップ操作の場合、BackingMap は、BackingMap 内のエントリーのキーまたは値をシリアライズ、デシリアライズ、またはコピーする必要があります。
BackingMap は、ObjectTransformer インターフェースのデフォルトの実装を提供することによって、これらのアクションを実行することができます。
アプリケーションは、BackingMap が、BackingMap 内のキーまたは値をシリアライズ、デシリアライズ、またはコピーするために
使用する、カスタム設計された ObjectTransformer プラグインを提供することで、パフォーマンスを改善できます。
詳しくは、ObjectTransformer プラグインを参照してください。
- Evictor プラグイン : 組み込み型存続時間 Evictor は、時間ベースのアルゴリズムを使用して、BackingMap 内のエントリーを除去する時点を判別します。
一部のアプリケーションは、BackingMap 内のエントリーを除去する時点を判別するために、
別のアルゴリズムを使用する場合があります。
Evictor プラグインは、カスタム設計された Evictor を有効にして、BackingMap が使用できるようにします。
Evictor プラグインは、組み込み型存続時間 Evictor に追加されます。
このプラグインは、存続時間 Evictor を置き換えません。
ObjectGrid は、「Least Recently Used (LRU)」や「Least Frequently Used (LFU)」のような、
既知のアルゴリズムを実装するカスタム Evictor プラグインを提供します。アプリケーションは、提供される Evictor プラグインのいずれか 1 つをプラグインすることも、
独自の Evictor プラグインを提供することもできます。
キャッシュ・オブジェクトの除去のためのプラグインを参照してください。
- MapEventListener プラグイン: アプリケーションは、マップ・エントリーの除去や BackingMap 完了のプリロードなどの BackingMap イベントを認識する必要がある場合があります。
BackingMap は、MapEventListener プラグインでメソッドを呼び出し、アプリケーションに BackingMap イベントを通知します。
アプリケーションは、setMapEventListener メソッドを使用して、さまざまな BackingMap イベントの通知を受け取り、
BackingMap に 1 つ以上のカスタム設計された MapEventListener プラグインを提供することができます。
アプリケーションは、addMapEventListener メソッドまたは removeMapEventListener メソッドを使用して、リストされた MapEventListener オブジェクトを変更することができます。
詳しくは、MapEventListener プラグインを参照してください。
- Loader プラグイン : BackingMap は Map のメモリー内キャッシュです。
Loader プラグインは、BackingMap がメモリーと永続ストアの間でデータを移動させるために使用するオプションです。例えば、Java Database Connectivity (JDBC) Loader を使用して、
BackingMap とリレーショナル・データベースの 1 つ以上のリレーショナル・テーブルとの間で
データを入れたり取り出したりすることができます。
リレーショナル・データベースは、BackingMap の永続ストアとして使用する必要はありません。
この Loader はまた、BackingMap と 1 つのファイル間、BackingMap と Hibernate マップ間、
BackingMap と Java 2 Platform, Enterprise Edition (JEE) Entity Bean 間、
および BackingMap と他のアプリケーション・サーバー間などで、データを移動させるために使用できます。
アプリケーションは、使用されるすべての技術に関して、
BackingMap と永続ストアの間でデータを移動させるために、
カスタム設計された Loader プラグインを提供する必要があります。
Loader が提供されない場合は、BackingMap は単純なメモリー内キャッシュになります。詳しくは、データベースとの通信のためのプラグインを参照してください。
- OptimisticCallback プラグイン: BackingMap の LockStrategy 属性は、
OPTIMISTIC に設定され、BackingMap または Loader プラグインはマップの値に関する比較操作を実行する必要があります。
BackingMap および Loader は OptimisticCallback プラグインを使用して、
オプティミスティック・バージョン管理の比較演算を実行します。
詳しくは、キャッシュ・オブジェクトのバージョン管理と比較のためのプラグインを参照してください。
- MapIndexPlugin プラグイン: MapIndexPlugin プラグイン (短縮名
は Index) は、BackingMap が、格納されているオブジェクトの指定された属性に基づいて索引をビルドする場合に
使用するオプションです。
索引によって、アプリケーションは、特定の値または値の範囲を使用してオブジェクトを検索することができます。
索引には、静的と動的の 2 つのタイプがあります。詳しくは、『索引付け』を参照してください。
プラグインについて詳しくは、プラグインの概要を参照してください。