Verwaltung von Beziehungen

Objektorientierte Sprachen wie Java und relationale Datenbanken unterstützen Beziehungen oder Assoziationen. Beziehungen verringern den Speicherbedarf durch Die Verwendung von Objektreferenzen und Fremdschlüsseln.

Wenn Sie Beziehungen in einem Datengrid verwenden, müssen die Daten in einer Baumstruktur mit Integritätsbedingungen organisiert werden. Es muss einen einzigen Stammtyp in der Baumstruktur geben, und alle untergeordneten Typen dürfen nur einem einzigen Stammtyp zugeordnet sein. Beispiel: Eine Abteilung kann viele Mitarbeiter und ein Mitarbeiter viele Projekte haben. Aber ein Projekt kann keine Mitarbeiter haben, die zu verschiedenen Abteilungen gehören. Nach der Definition eines Stammobjekts werden alle Zugriff auf dieses Stammobjekt und seine untergeordneten Objekte über das Stammobjekt verwaltet. WebSphere eXtreme Scale verwendet den Hash-Code des Stammobjektschlüssels, um eine Partition auszuwählen. Beispiel:

Partition = (Hash-Code MOD Anzahl_Partitionen)

Wenn alle Daten für eine Beziehung an eine einzige Objektinstanz gebunden sind, kann die gesamte Baumstruktur in einer einzigen Partition zusammengefasst werden, und der Zugriff auf diese Instanz kann sehr effizient über eine einzige Transaktion erfolgen. Wenn sich die Daten auf mehrere Beziehungen verteilen, müssen mehrere Partitionen beteiligt werden. Dies impliziert zusätzliche Fernaufrufe, was zu Leistungsengpässen führen kann.

Referenzdaten

Einige Beziehungen enthalten Such- oder Referenzdaten, wie z. B. CountryName. Zum Suchen oder Referenzieren von Daten müssen die Daten in jeder Partition vorhanden sein. Der Zugriff auf die Daten kann über einen beliebigen Stammschlüssel erfolgen, und es wird immer dasselbe Ergebnis zurückgegeben. Referenzdaten wie diese sollten nur verwendet werden, wenn die Daten relativ statisch sind. Die Aktualisierung dieser Daetn kann kostenintensiv sein, weil die Daten in jeder Partition aktualisiert werden müssen. Die API "DataGrid" ist eine gängige Technik, mit der Referenzdaten auf dem aktuellen Stand gehalten werden können.

Kosten und Vorteile der Normalisierung

Durch die Normalisierung der Daten über Beziehungen kann der Speicherbedarf des Datengrids verringert werden, weil sich die Duplizierung der Daten verringert. Im Allgemeinen gilt jedoch, dass die horizontale Skalierung mit zunehmendem Volumen relationaler Daten abnimmt. Wenn Daten gruppiert werden, nimmt der Aufwand für die Verwaltung der Beziehungen und deren Größe zu. Da die Daten von Gridpartitionen auf dem Schlüssel des Stammobjekts der Baumstruktur basieren, wird die Größe der Baumstruktur nicht berücksichtigt. Wenn Sie sehr viele Beziehungen für eine einzige Instanz der Baumstruktur haben, kann die Datenverteilung im Datengrid deshalb ungleichmäßig sein, d. h., eine Partition enthält mehr Daten als die anderen.

Wenn die Daten normalisiert oder reduziert werden, werden die Daten, die normalerweise von zwei Objekten gemeinsam genutzt werden, stattdessen dupliziert, und jede Tabelle kann gesondert partitioniert werden, wodurch eine gleichmäßigere Verteilung der Daten im Datengrid möglich ist. Dies erhöht zwar den Speicherbedarf, aber die Anwendung kann skaliert werden, da auf eine einzige Datenzeile zugegriffen werden kann, die alle erforderlichen Daten enthält. Dies ist ideal für die Grid, in denen hauptsächlich Leseoperationen durchgeführt werden, da die Verwaltung der Daten kostenintensiver wird.

Weitere Informationen finden Sie auf der Webseite "Classifying XTP systems and scaling".

Beziehungen über die Datenzugriffs-APIs verwalten

Die API "ObjectMap" ist die schnellste, flexibelste und differenzierteste der Datenzugriffs-APIs und unterstützt einen transaktionsorientierten, sitzungsbasierten Ansatz für den Zugriff auf Daten im Map-Grid. Die API "ObjectMap" ermöglicht Clients die Verwendung allgemeiner CRUD-Operationen (Create, Read, Update and Delete, Erstellen, Lesen, Aktualisieren und Löschen) für die Verwaltung von Schlüssel/Wert-Paaren für die Objekte im verteilten Datengrid.

Wenn Sie die API "ObjectMap" verwenden, müssen Objektbeziehungen durch Integration des Fremdschlüssels für alle Beziehungen im übergeordneten Objekt ausgedrückt werden.

Es folgt ein Beispiel:

public class Department {
	Collection<String> employeeIds;
}

Die API "EntityManager" vereinfacht die Verwaltung von Beziehungen, indem sie persistente Daten aus den Objekten extrahiert, einschließlich der Fremdschlüssel. Wenn das Objekt später aus dem Datengrid abgerufen wird, wird der Beziehungsgraph erneut erstellt, wie im folgenden Beispiel gezeigt wird:

@Entity
public class Department {
	Collection<String> employees;
}

Die API "EntityManager" ist anderen Java-Objektpersistenztechnologien wie JPA und Hibernate insofern sehr ähnlich, als sie einen Graph verwalteter Java-Objektinstanzen mit dem persistenten Speicher synchronisiert. In diesem Fall ist der persistente Speicher ein eXtreme-Scale-Datengrid, in dem jede Entität als Map dargestellt wird, die die Entitätsdaten und nicht die Objektinstanzen enthält.