Kopieroperationen mit der Schnittstelle "ObjectTransformer" optimieren

Die Schnittstelle "ObjectTransformer" verwendet Callbacks objects die Anwendung, um angepasste Implementierungen gängiger und kostenintensiver Operationen, wie z. B. Objektserialisierung und tiefe Kopien von Objekten, zu unterstützen.

Veraltetes Feature Die Schnittstelle "ObjectTransformer" wurde durch die DataSerializer-Plug-ins ersetzt, die Sie verwenden können, um beliebige Daten effizient in WebSphere eXtreme Scale zu speichern, damit vorhandene Produkt-APIs effizient mit Ihren Daten interagieren können.

Übersicht

In allen Modi mit Ausnahme des Modus NO_COPY werden Kopien der Daten erstellt. Der Standardkopiermechanismus, der in eXtreme Scale eingesetzt wird, ist die Serialisierung, die bekanntermaßen eine kostenintensive Operation ist. In dieser Situation kommt die Schnittstelle "ObjectTransformer" zur Anwendung. Die Schnittstelle "ObjectTransformer" verwendet Callbacks an die Anwendung, um eine angepasste Implementierung gängiger und kostenintensiver Operationen, wie z. B. Objektserialisierung und tiefe Kopien für Objekte, zu unterstützen.

Eine Anwendung kann eine Implementierung der Schnittstelle "ObjectTransformer" für eine Map bereitstellen. eXtreme Scale delegiert die Arbeit dann an die Methoden in diesem Objekt und verlässt sich darauf, dass die Anwendung eine optimierte Version jeder Methode in der Schnittstelle bereitstellt. Im Folgenden sehen Sie die Schnittstelle "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);
}
Über den folgenden Beispielcode können Sie einer BackingMap eine Schnittstelle "ObjectTransformer" zuordnen:
ObjectGrid g = ...;
BackingMap bm = g.defineMap("PERSON");
MyObjectTransformer ot = new MyObjectTransformer();
bm.setObjectTransformer(ot);

Operationen für tiefe Kopien optimieren

Wenn eine Anwendung ein Objekt von einer ObjectMap empfängt, führt eXtreme Scale eine tiefe Kopie des Objektwerts durch, um sicherzustellen, dass die Datenintegrität der Kopie in der BaseMap-Map gewahrt bleibt. Anschließend kann die Anwendung den Objektwert beruhigt ändern. Beim Festschreiben der Transaktion wird die Kopie des Objektwerts in der BaseMap-Map in den neuen, geänderten Wert aktualisiert, und die Anwendung verwendet diesen Wert von diesem Zeitpunkt an nicht mehr. Sie hätten das Objekt in der Festschreibungsphase erneut kopieren können, um eine private Kopie zu erstellen, aber in diesem Fall wurden die Leistungskosten dieser Transaktion gegen die Anweisung an den Anwendungsprogrammierer, den Wert nach der Transaktionsfestschreibung nicht zu verwenden, abgewogen. Der Standard-ObjectTransformer versucht, einen Klon oder eine Kombination der Methoden "serialize" und "inflate" zu verwenden, um eine Kopie zu generieren. Die Kombination der Methoden "serialize" und "inflate" ist das Szenario mit der schlechtesten Leistung. Wenn bei der Profilerstellung festgestellt wird, dass die Ausführung der Methoden "serialize" und "inflate" ein Problem für Ihre Anwendung darstellen, schreiben Sie eine entsprechende Methode "clone", um eine tiefe Kopie zu erstellen. Wenn Sie die Klasse nicht ändern können, erstellen Sie ein angepasstes ObjectTransformer-Plug-in, und implementieren Sie weitere effiziente copyValue- und copyKey-Methoden.