WebSphere eXtreme Scale verwendet mehrere Java-Prozesse, in denen Daten gespeichert werden. Diese Prozesse serialisieren die Daten, d. h., sie konvertieren die Daten (die das Format von Java-Objektinstanzen haben) in Bytes und bei Bedarf zurück in Objekte, um die Daten zwischen Client- und Serverprozessen zu verschieben. Das Marshaling der Daten ist die kostenintensivste Operation und muss vom Anwendungsentwickler beim Design des Schemas, bei der Konfiguration des Datengrids und bei der Interaktion mit den Datenzugriffs-APIs berücksichtigt werden.
Die Java-Standardserialisierungs- und -Kopierroutinen sind relativ langsam und können in einem typischen Setup 60 bis 70 Prozent des Prozessors belegen. In den folgenden Abschnitten sind Möglichkeiten zur Verbesserung der Serialisierungsleistung beschrieben.
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.
Die Anwendung muss keine Schlüssel kopieren, weil Schlüssel als unveränderlich betrachtet werden.
Wenn Sie die EntityManager-API mit Entitäten verwenden, speichert das ObjectGrid die Entitätsobjekte nicht direkt in den BackingMaps. Die EntityManager-API konvertiert die Entitätsobjekte in Tupelobjekte. Entitäts-Maps werden automatisch einem hoch optimierten ObjectTransformer zugeordnet. Jedesmal, wenn die API "ObjectMap" oder die API "EntityManager" für die Interaktion mit Entitäts-Maps verwendet wird, wird der ObjectTransformer der Entität aufgerufen.
Es gibt einige Fälle, in denen Objekte für die Verwendung einer angepassten Serialisierung geändert werden müssen, z. B. durch Implementierung der Schnittstelle "java.io.Externalizable" oder durch Implementierung der Methoden "writeObject" und "readObject" für Klassen, die die Schnittstelle "java.io.Serializable" implementieren. Sie müssen angepasste Serialisierungstechniken verwenden, wenn die Objekte mit anderen Mechanismen als den Methoden der API "ObjectGrid" oder "EntityManager" serialisiert werden.
Wenn Objekte oder Entitäten beispielsweise als Instanzdaten in einem DataGrid-API-Agenten gespeichert werden oder wenn der Agent Objekte oder Entitäten zurückgibt, werden diese Objekte nicht mit einem ObjectTransformer umgesetzt. Der Agent verwendet jedoch automatisch den ObjectTransformer, wenn Sie die Schnittstelle EntityMixin verwenden. Weitere Einzelheiten finden Sie in der Dokumentation zu DataGrid-Agenten und entitätsbasierten Maps.
Verwenden Sie API "ObjectMap" oder "DataGrid", werden die Schlüssel- und Wertobjekte serialisiert, wenn der Client mit dem Datengrid interagiert oder wenn die Objekte repliziert werden. Um die Kosten für die Serialisierung zu vermeiden, können Sie Bytefeldgruppen an Stelle von Java-Objekten verwenden. Bytefeldgruppen können wesentlich kostengünstiger im Hauptspeicher gespeichert werden, da das JDK für die Garbage-Collection weniger Objekte durchsuchen muss und die Objekte ausschließlich bei Bedarf dekomprimiert werden können. Bytefeldgruppen können nur verwendet werden, wenn Sie keinen Zugriff auf die Objekte über Abfragen oder Indizes benötigen. Da die Daten in Form von Bytes gespeichert werden, kann der Zugriff auf die Daten nur über ihren Schüssel erfolgen.
WebSphere eXtreme Scale kann Daten automatisch als Bytefeldgruppen speichern, wenn die Konfigurationsoption "CopyMode.COPY_TO_BYTES" für die Map verwendet wird. Die Speicherung kann aber aber auch manuell vom Client vorgenommen werden. Diese Option speichert die Daten effizient im Speicher und kann die Objekte in der Bytefeldgruppe auch automatisch dekomprimieren, damit sie bei Bedarf für Abfragen und Indizes verwendet werden können.
Ein MapSerializerPlugin-Plug-in kann einem BackingMap-Plug-in zugeordnet werden, wenn Sie den Kopiermodus COPY_TO_BYTES oder COPY_TO_BYTES_RAW verwenden. Diese Assoziation ermöglicht die Speicherung von Daten in serialisiertem Format anstelle des nativen Java-Objektformats im Hauptspeicher. Das Speichern serialisierter Daten spart Hauptspeicherkapazität ein und verbessert Replikation und Leistung in Client und Server. Sie können ein DataSerializer-Plug-in verwenden, um leistungsfähige Serialisierungsdatenströme zu entwickeln, die komprimiert, verschlüsselt, weiterentwickelt und abgefragt werden können.