WebSphere® eXtreme Scale は、 複数の Java プロセスを 使用してデータを保持します。これらのプロセスはデータをシリアライズします。つまり、クライアント・プロセスとサーバー・プロセスの間で データを移動させるために、(Java オブジェクト・インスタンス形式の) データをバイトに変換し、必要に応じて再びオブジェクトに戻します。 データのマーシャルは最もコストのかかる操作であり、アプリケーション開発者は、スキーマを設計し、データ・グリッドを構成し、データ・アクセス API と対話する際に、それに対処する必要があります。
デフォルトの Java シリアライゼーション・ルーチン およびコピー・ルーチンは、比較的遅く、標準的なセットアップではプロセッサーの 60 から 70 パーセントを 消費する場合があります。以降のセクションに、 シリアライゼーションのパフォーマンスを改善するための選択肢を示します。
ObjectTransformer インターフェースは、DataSerializer プラグインで置換されました。これを使用して、既存の製品 API がデータと効率的に対話できるように WebSphere eXtreme
Scale 内の任意のデータを効率的に格納できます。
キーは不変であると見なされるため、アプリケーションはキーをコピーする必要はありません。
EntityManager API を 使用している場合、エンティティー・オブジェクトは BackingMap には 直接保管されません。EntityManager API はエンティティー・オブジェクトを Tuple オブジェクトに変換します。エンティティー・マップは、高度に最適化された ObjectTransformer と 自動的に関連付けられます。ObjectMap API または EntityManager API を使用してエンティティー・マップと対話する際、必ずエンティティー ObjectTransformer が起動されます。
一部のケースでは、オブジェクトを変更して、 カスタム・シリアライゼーションを使用するようにする必要があります (例えば、java.io.Externalizable インターフェースを実装する、または java.io.Serializable インターフェースを実装しているクラスの writeObject および readObject メソッドを実装するなど)。 ObjectGrid API または EntityManager API のメソッド以外のメカニズムを使用して オブジェクトをシリアライゼーションするときは、カスタムのシリアライズした技法を採用する 必要があります。
例えば、オブジェクトまたはエンティティーが インスタンス・データとして DataGrid API エージェント内に保管されるとき、またはエージェントがオブジェクトや エンティティーを返すとき、それらのオブジェクトは ObjectTransformer を使用して変換されません。 ただし、EntityMixin インターフェースが使用されている場合、エージェントは、 自動的に ObjectTransformer を使用します。詳しくは、『DataGrid エージェントとエンティティー・ベースのマップ』を 参照してください。
ObjectMap または DataGrid API を 使用している場合、クライアントがデータ・グリッドと対話するとき、 および、オブジェクトが複製されるときには、キーと値のオブジェクトがシリアライズ されます。シリアライゼーションのオーバーヘッドを避ける には、Java オブジェクトの代わりにバイト配列を使用します。バイト配列 を使用すればメモリーへの保管にかかるコストはずっと少なくてすみます。これは、JDK がガーベッジ・コレクション中に 検索するオブジェクトが少なく、必要なときだけインフレートできる ためです。バイト配列は、照会または索引を使用してオブジェクトにアクセスする必要が ない場合にのみ使用するべきです。データはバイトとして保管 されるので、データにはキーを介してのみアクセスできます。
WebSphere eXtreme Scale は、 CopyMode.COPY_TO_BYTES マップ構成オプションを使用して、自動的にデータをバイト配列として 保管できますが、クライアントによる手動での処理も可能です。このオプション は、データをメモリーに効率的に保管し、照会および索引によるオンデマンドでの使用 のために、バイト配列内のオブジェクトを自動的にインフレートすることも できます。
COPY_TO_BYTES または COPY_TO_BYTES_RAW コピー・モードを使用しているときに、MapSerializerPlugin プラグインを BackingMap プラグインと関連付けることができます。このアソシエーションにより、データをネイティブ Java オブジェクトの形式ではなく、メモリー内にシリアライズされた形式で保管することができます。シリアライズされたデータを保管することで、メモリーが節約され、クライアントおよびサーバー上のレプリカ生成およびパフォーマンスが向上します。DataSerializer プラグインを使用すると、圧縮、暗号化、展開および照会が可能な高性能のシリアライゼーション・ストリームを開発できます。