ObjectTransformer インターフェースを使用したコピー操作のチューニング

ObjectTransformer インターフェースは、アプリケーションへのコールバックを使用して、通常の操作と、オブジェクト・シリアライゼーションやオブジェクトのディープ・コピーなどのコストのかかる操作のカスタム実装を提供します。

Deprecated feature ObjectTransformer インターフェースは、DataSerializer プラグインで置換されました。これを使用して、既存の製品 API がデータと効率的に対話できるように WebSphere® eXtreme Scale 内の任意のデータを効率的に格納できます。

概要

NO_COPY モードが使用されている場合を除いて、値のコピーは常に行われます。eXtreme Scale 内で採用されているデフォルトのコピー・メカニズムはシリアライゼーションであり、これはコストのかかる操作として知られています。 ObjectTransformer インターフェースはこのような状況で使用します。ObjectTransformer インターフェースは、アプリケーションへのコールバックを使用して、通常の操作と、オブジェクト・シリアライズやオブジェクトに対するディープ・コピーなどのコストのかかる操作のカスタム実装を提供します。

アプリケーションで、マップに対する ObjectTransformer インターフェースの 実装が提供できると、eXtreme Scale は、このオブジェクトに対するメソッドに権限を委任し、インターフェースにおける各メソッドの最適化バージョンの提供はアプリケーションに頼ります。 ObjectTransformer インターフェースは以下のようになります。
public interface ObjectTransformer {
    void serializeKey(Object key, ObjectOutputStream stream) throws IOException;
    void serializeValue(Object value, ObjectOutputStream stream) throws IOException;
    Object inflateKey(ObjectInputStream stream) throws IOException, ClassNotFoundException;
    Object inflateValue(ObjectInputStream stream) throws IOException, ClassNotFoundException;
    Object copyValue(Object value);
    Object copyKey(Object key);
}
次のコード例を使用して、ObjectTransformer インターフェースを BackingMap に関連付けることができます。
ObjectGrid g = ...;
BackingMap bm = g.defineMap("PERSON");
MyObjectTransformer ot = new MyObjectTransformer();
bm.setObjectTransformer(ot);

ディープ・コピー操作を調整する

アプリケーションが ObjectMap からオブジェクトを受け取った後で、eXtreme Scale は、オブジェクト値に対してディープ・コピーを実行し、BaseMap マップ内のコピーがデータ保全性を維持するようにします。 その後アプリケーションはこのオブジェクト値を安全に変更できます。トランザクションがコミットすると、BaseMap マップ内のオブジェクト値のコピーは新しく変更される値に更新され、アプリケーションはその時点からその値の使用を停止します。コミット・フェーズで再度オブジェクトをコピーして、プライベート・コピーを作成した可能性があります。 ただし、この場合は、このアクションのパフォーマンス・コストは、トランザクションのコミットの後で値を使用しないようアプリケーション・プログラマーに要求することに対してトレードオフされました。 デフォルトの ObjectTransformer は、clone または serialize と inflate のペアを使用して、コピーを生成しようとします。 直列化とインフレーションのペアは、最悪なパフォーマンス・シナリオです。プロファイル作成によって、serialize と inflate がご使用のアプリケーションにとって問題であることが判明したら、ディープ・コピーを作成する適切な clone メソッドを書きます。 クラスを変更できない場合は、カスタム ObjectTransformer プラグインを作成し、より効率的な copyValue および copyKey メソッドを実装します。