Pures Vergnügen

DB2 wird hybrid mit neuartiger XML-Unterstützung

Holger Seubert

DB2 Version 9, das Viper-Release der IBM-Datenbank, erfährt eine Evolution zu einem hybriden Datenbanksystem. Nicht nur relationale Daten werden mit gewohnter Performanz und Sicherheit verwaltet, sondern auch XML direkt in seiner hierarchischen Struktur gespeichert. Mit der neuen, patentierten pureXML-Technologie integriert IBM eine native Speicherung und Verarbeitung von XML in die traditionell bekannten Datenbankfunktionen von DB2.

Für heutige Anwendungen ist die effiziente Verarbeitung und einfache Verwaltung von XML in Datenbanksystemen eine gängige Anforderung. Immer mehr Daten werden in Form von XML modelliert, verarbeitet und zwischen unterschiedlichen Komponenten einer Softwarelösung ausgetauscht.

Dabei löst XML keineswegs das bisherige relationale Datenmodel ab, vielmehr stellt es eine Ergänzung dar. Immer mehr Anwendungsszenarien verlangen eine kombinierte Speicherung von XML und relationalen Daten. Nicht nur die relationalen Daten sollen bestmöglich in ihrer tabellarischen Form gespeichert werden, sondern auch XML nativ in seiner hierarchischen Form in der Datenbank abgelegt werden.

Die bisherige relationale Datenbanktechnolgie bietet hierfür die Speicherung von XML in Large Objects (LOBs) an. Dieser einfache Ansatz, XML-Daten als Ganzes in einer Spalte vom Typ CLOB oder BLOB zu speichern, hat seinen Preis: Ein inhaltsbasierter Zugriff auf einzelne Elemente der XML-Struktur kann nicht problemlos realisiert werden. Gängige Lösungsansätze sind das Halten spezieller Indexe oder die Verwaltung zusätzlicher Seitentabellen. Letzteres kommt einem partiellen Schreddern von XML nahe, was die zweite typische Speichermöglichkeit von XML in relationalen Datenbanksystemen darstellt. Der Schreddingansatz realisiert die Abbildung von XML auf Tabellenstrukturen und bietet einen performanten, inhaltsbasierten Zugriff auf die Daten mittels SQL. Eine solche Abbildung ist aber nicht immer trivial bzw. möglich.

Auch der Zugriff mittels XQuery ist bei beiden Ansätzen nicht unproblematisch. Die LOB-Speicherung verlangt ein kostspieliges Parsen der XML-Dokumente in ein geeignetes XQuery-Datenmodell, während der Schreddingansatz eine Übersetzung von XQuery nach SQL erfordert.

Bisherige Lösungen zur Speicherung von XML in relationalen Datenbanken verlangen gewisse Kompromisse im Bereich der unterstützen XML-Funktionalität (z.B. XQuery-Anfrage, Indizierung einzelner Elemente) und der Abfrageperformanz. Die resultierenden Nachteile der heutigen Ansätze lassen sich auf eine Problemstellung reduzieren: Die relationale Datenbank hat kein „Verständnis“, d.h. keine technischen Möglichkeiten, um XML in seinem hierarchischen Datenmodell zu speichern und direkt über diesem Datenmodell zu operieren.

Diese Situation ändert sich mit DB2 9. Neben den bekannten Verfahren zur Speicherung von relationalen Daten, integriert IBM eine neue Speichertechnologie für XML in DB2.

Mit der so genannten pureXML-Speichertechnologie hat DB2 eine Evolution zu einem hybriden Datenbanksystem erfahren. Nicht nur relationale Daten werden verwaltet, sondern auch XML-Daten gemäß ihrer hierarchischen Form als annotierte Baumstruktur gespeichert.

Der bisher (objekt-)relationale Daten-Server wurde mit einem zusätzlichen, voll integrierten Speichermechanismus erweitert, der es erlaubt, XML nativ zu verwalten. Eine optimale Verarbeitung von XML wird damit möglich. Dafür steht neben XQuery als neuer primärer Anfragesprache in DB2 auch SQL zur Verfügung, dessen Sprachumfang durch eine Reihe von standardisierten SQL/XML-Funktionen ergänzt wurde. Diese ermöglichen es, XQuery-Ausdrücke direkt in eine SQL-Anfrage einzubetten. Andererseits ist es auch möglich, SQL in XQuery zu benutzen.

Unabhängig von der Wahl der Anfragesprache kann der Zugriff auf XML-Dokumente in DB2 9 mit einem neuen XML-Indizierungsverfahren beschleunigt werden. Unter Verwendung von XPath-Ausdrücken lassen sich einzelne Elemente, Attribute oder Dokumentteile in der XML-Struktur gezielt indizieren.Neben dem Zugriff auf XML ist auch die Sicherstellung der strukturellen Integrität der XML-Daten von Bedeutung. Diese Aufgabe wird durch ein XML Schema Repository (XSR) in DB2 9 implementiert. Hier kann der Benutzer beliebige XML-Schema-Dokumente registrieren, die optional bei SQL INSERT– oder UPDATE-Operationen auf XML-Daten zur Validierung herangezogen werden können. Solch administrative Aufgaben wie die Verwaltung von Schema-Dokumenten oder XML-Indexen können vom Datenbankadministrator durch entsprechende Erweiterungen im DB2 Control Center per GUI realisiert werden. Auch der Anwendungsentwickler wird mit einer Reihe neuer Editoren und Wizards in der Eclipse-basierten DB2 Developer Workbench unterstützt. Etwa ein XQuery Editor erlaubt ein kontextbasiertes Schreiben von XQuery-Ausdrücken, die direkt aus dem Editor ausgeführt werden können.

Im Folgenden wird die neue, strukturell konsistente Speicherung von XML-Daten in DB2 9 beschrieben und an Beispielen erläutert, wie die neuen XML-Funktionen benutzt werden können. Es wird gezeigt, wie XML-Daten mit pure-XML gespeichert und mit XQuery und SQL abgefragt werden. Für die verwendeten Beispiele stehen die XML-Daten zum Download bereit und können mit DB2 9 Express-C ausprobiert werden.

Speichern von XML in DB2 – was ist neu?

Die pureXML-Speichertechnologie in DB2 9 präsentiert sich dem Endbenutzer mit einem neuen SQL/XML:2006 konformen Datentyp „XML“, der in einer UTF-8, Single-Partition-Datenbank verwendet werden kann. Folgender Befehl legt eine entsprechende Datenbank an, die in den folgenden Beispielen verwendet wird:

CREATE DATABASE xmldb USING CODESET UTF-8 TERRITORY DE;

Wie bei anderen Datentypen auch, lässt sich der neue XML-Datentyp bei der Definition von Datenbankobjekten, wie z.B. bei Tabellen oder Stored Procedures, verwenden. Dabei kann die Tabelle neben XML-Dokumenten auch andere Datentypen halten. Auch mehr als eine Spalte vom Typ XML ist möglich.

Diese Einbindung der XML-Speicherung in das logische Konzept der Tabellen veranschaulicht die hybride Idee des Systems. Neu bei dem XML-Datentyp ist seine Realisierung im Hintergrundspeicher, der die hierarchische Struktur abbildet. Sonst wird er wie jeder andere Datentyp in DB2 verwendet.

Für die im Artikel verwendeten Beispiele werden folgende zwei Tabellen zur nativen Speicherung von XML-Daten angelegt:

CREATE TABLE Produkte (pid int not null, Beschreibung XML);
CREATE TABLE Hersteller (hid int not null, Info XML);

Die XML-Dokumente, die in der Produkt.Beschreibung- und Hersteller.Info-Spalte gespeichert werden, sind in Abbildung 1 gezeigt.

Abb. 1: XML-Dokumentenstruktur der „Produkte“- und „Hersteller“-Beispieldaten

In einer Spalte vom Datentyp XML kann jedes wohlgeformte XML-Dokument gespeichert werden. Neben der Wohlgeformtheit von XML kann optional auch die strukturelle Integrität auf Basis eines XML Schemas von DB2 sichergestellt werden. So verhindert DB2, dass ungültige XML-Dokumente gespeichert werden bzw. invalide Änderungen in XML-Dokumenten vorgenommen werden.

XML-Dokumente in einer Spalte können aber durchaus auch von unterschiedlicher Struktur sein, d.h. gegen unterschiedliche XML-Schema-Dokumente validiert werden oder auch gar keinem Schema entsprechen.

Wie lassen sich nun XML-Daten in der oben definierten Produkt- und Hersteller-Tabelle mit dem neuen Datentyp XML speichern? XML-Daten werden, wie andere Datentypen auch, durch SQL INSERT oder dem DB2 IMPORT Utility gespeichert. So können die XML-Produktbeschreibungen aus Abbildung 1 wie folgt in obige Produkttabelle einfügt werden:

INSERT INTO Produkt(Beschreibung) VALUES(' ... ');

Implizit wird beim INSERT das serialisierte XML-Dokument <Produkt> … </Produkt> in das XQuery-Datenmodel (XDM) geparst, welches dann direkt in DB2 gespeichert wird.

Zum Einfügen der im Artikel verwendeten Beispieldaten verwenden wir das IMPORT Utility. Die Produktdaten sowie die Herstellerinformationen können wie folgt in die Datenbank eingefügt werden:

IMPORT FROM 'F:ArtikelFilesprodukte.del' OF DEL XML FROM F:ArtikelFilesxml1 INSERT INTO Produkte;

IMPORT FROM 'F:ArtikelFileshersteller.del' OF DEL XML FROM F:ArtikelFilesxml1 INSERT INTO Hersteller;

Um direkt über der gespeicherten hierarchischen Form der XML-Daten arbeiten zu können, wurden alle DB2-Kernkomponenten wie z.B. der Optimizer erweitert. Dem nun hybriden Optimizer stehen spezielle Operationen für den Zugriff auf XML-Daten und XML-Indexe zur Verfügung. Somit hat DB2 ein „Verständnis“ für die Struktur in XML-Dokumenten bekommen. Inhaltsbasierte Anfragen auf XML werden im Vergleich zu den zwei bereits erwähnten Speichermöglichkeiten (LOB-Speicherung und „Schredding“) effektiver. Wie diese Anfragen mit XQuery oder SQL realisiert werden können, wird im nächsten Abschnitt gezeigt.

Geschrieben von
Holger Seubert
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.