Serialisierung optimieren

Die DataSerializer-Plug-ins stellen Metadaten bereit, die WebSphere eXtreme Scale die während der Serialisierung direkt und nicht direkt verwendbaren Attribute, den Pfad zu den zu serialisierenden Daten und den Typ der im Speicher zu speichernden Daten mitteilen. Sie können die Leistung der Objektserialisierung und -deserialisierung optimieren, damit Sie effizient mit dem Byte-Array interagieren können.

Übersicht

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.

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. Für eine verbesserte Leistung können Sie in den meisten Fällen jedoch die DataSerializer-Plug-ins für die Serialisierung von Objekten verwenden. Sie müssen den Kopiermodus COPY_TO_BYTES oder COPY_TO_BYTES_RAW verwenden, um die DataSerializer-Plug-ins nutzen zu können. Weitere Informationen finden Sie unter Serialisierung mit den DataSerializer-Plug-ins.

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);

Objektserialisierung und -dekomprimierung optimieren

Die Objektserialisierung ist gewöhnlich der wichtigste Leistungsaspekt in eXtreme Scale. Sie verwendet den Standardmechanismus "Serializable", wenn kein ObjectTransformer-Plug-in von der Anwendung angegeben wird. Eine Anwendung kann Implementierungen der Serializable-Methoden "readObject" und "writeObject" bereitstellen oder von den Objekten die Schnittstelle "Externalizable" implementieren lassen, die ungefähr zehn Mal schneller ist. Wenn die Objekte in der Map nicht geändert werden können, kann eine Anwendung der ObjectMap eine Schnittstelle "ObjectTransformer" zuordnen. Die Methoden "serialize" und "inflate" werden bereitgestellt, um der Anwendung die Bereitstellung angepassten Codes für die Optimierung dieser Operationen bereitzustellen, da ihr Leistungseinfluss auf das System sehr hoch ist. Die Methode "serialize" serialisiert das Objekt in den bereitgestellten Datenstrom. Die Methode "inflate" liefert den Eingabedatenstrom und erwartet von der Anwendung, dass diese das Objekt erstellt, das Objekt anhand der Daten im Datenstrom dekomprimiert und das Objekt dann zurückgibt. Implementierungen der Methoden "serialize" und "inflate" müssen einander spiegeln.

Die DataSerializer-Plug-ins ersetzen die ObjectTransformer-Plug-ins, die veraltet sind. Für eine effiziente Serialisierung Ihrer Daten verwenden Sie die DataSerializer-Plug-ins, mit denen Sie in den meisten Fällen eine Leistungsverbesserung erzielen können. Wenn Sie beispielsweise Funktionen wie Abfrage und Indexierung verwenden möchten, können Sie sofort von den Leistungsverbesserungen profitieren, die mit den DataSerializer-Plug-ins erzielt werden, ohne Konfigurations- oder Programmänderungen an Ihrem Anwendungscode vorzunehmen.