XML in kommerziellen Datenbanksystemen

Werbung
XML in kommerziellen Datenbanksystemen
Vortrag im Rahmen des Seminares: „XML Datenbanken“
Cordula Bauer
Thematik:
·
·
·
Untersucht werden MS SQL Server, Oracle und DB2
Alle drei Anbieter haben XML in ihre bestehenden, relationalen Datenbanksysteme integriert
Ziel ist es das DBS als native XML Datenbank nutzen zu können
·
Zentrale Fragestellung des Vortrags:
Wie kann XML innerhalb eines relationalen DBS gespeichert, indexiert, wiedergefunden und geupdated
werden?
Problem der fehlenden Standardisierung:
•
•
•
•
der XML-Datentyp wurde im SQL-2003-Standard definiert
abgesehen davon sind viele Standards für XML noch nicht durchgesetzt
Mitglieder aller drei Firmen (v.a. IBM) sind Mitglieder in den W3C-Gremien
dennoch finden die Spezifikationen erst langsam Eingang in die kommerziellen Systeme
à Obwohl sich viele Gemeinsamkeiten in den 3 Systemen erkennen lassen, gibt es keine einheitliche Umsetzung
Inhalt:
·
·
·
·
·
Allgemeine Konzepte
MS SQL Server
Oracle
DB2
Zusammenfassung
Allgemeine Konzepte:
XML Modell vs. relationales Modell
Speicherung:
Bisher:
· Speicherung als BLOB oder CLOB
·
Vorteil: schneller Aufruf des
Dokuments
·
Nachteil: mit Knoten kann nicht direkt
gearbeitet werden
·
Shredding: Knoten werden auf
Tabellenzeilen gemappt (z.B. über
Annotationen im XMLSchema)
·
Vorteil: einfacher Zugriff auf die
Informationen in den einzelnen
Knoten
Nachteil: aufwändig zu erstellen, viele Tablellen,
viele Nullwerte
XML Datentyp
•
•
•
Kann wie number oder varchar als Datentyp für eine Spalte in einer relationalen Tabelle vergeben werden
Zugrunde liegendes Datenmodell: XQuery Data Model
Beim Einfügen eines neuen Dokuments kann so auf Wohlgeformtheit geprüft werden
create table XMLDocs (id number, doc XMLDatentyp)
Diese logische Abstraktion ist in allen 3 Systemen gleich. Unterschiede bestehen in der physischen Speicherung.
SQL Server
The Big Picture
Physische Speicherung:
Das physische Modell des XML Datentyps ist eine binäre Repräsentation der logischen Konzepte (Elemente,
Attribute, etc.) XMLs.
•
•
Speicherung dieser Repräsentation als BLOB
Größe des Dokument wird um 20%-30% reduziert
XML Schema Collection
In der XML Schema Collection können verschiedene XML Schema Komponenten gespeichert werden, z.B.
Element- oder Typ-Deklarationen
create xml schema collection S1 as @s
Spalte vom XML Typ kann mit Schema versehen werden:
create table Orders(id int, orderdate datetime, POContract XML(document ContractSchema))
Auch expliziter Type-Check möglich:
select CAST(@x as XML(S1)) (@x sei Instanz vom Typ XML)
XML Index
Der primäre XML Index von Microsoft nennt sich Node Table. Es ist eine Tabelle in welcher eine Zeile einem
Knoten entspricht.
create primary xml index xldx ON XDoc(doc)
Vereinfacht sieht der Index in etwa so aus:
OrdPath
1
1.1
1.3
Path_ID
#BOOK
#ISBN#BOOK
#TITLE#BOOK
tag
1 (BOOK)
2 (ISBN)
3 (TITLE)
node type
1 (Element)
2 (Attribute)
1 (Element)
value
null
‘1-5586-34‘
„Bad Bugs“
Des weiteren stehen 3 sekundäre Indexe zur Verfügung:
PATH Index | PROPERTY Index | VALUE Index
XQuery
Für SQL stehen Funktionen bereit um XQuery und XPath-Ausdrücke zu integrieren:
.query() gibt Wert vom XML Datentyp zurück
.value() gibt Wert eines der SQL-Datentypen zurück
.exist() gibt 0 zurück wenn Ergebnis leere Menge, sonst 1
.nodes() gibt für jeden Unterknoten des Ergebnisknotens eine Zeile zurück
Beispiel1: exist()-Funktion
SELECT doc
FROM TripReports
WHERE 1 = doc.exist(‘/doc/customer//saleslead‘)
Beispiel 2 query()-Funktion:
SELECT doc.query (‘for $c in /doc/customer
where $c//saleslead
return <customer id=„{$c/@id}“>
{$c//saleslead}</customer>‘)
FROM TripReports
Beispiel 3 value()-Funktion:
SELECT doc.value(‘/doc/customer/order/@id‘, ‘int‘)
as OrderID
FROM TripReports
Beispiel 4 value() und nodes()-Funktion:
SELECT orders.value(‘@id‘, ‘int‘) as OrderID
FROM TripReports doc.nodes(‘/doc/customer/order‘)
as orders
Falls node table (XML Index) von den vom Query betroffenen Dokumenten noch nicht erstellt wurde, wird dies
nachgeholt. Er wird zur Query-Optimierung eingesetzt.
XQuery wird transformiert.
(siehe Grafik)
XPath-Ausdrücke werden auf Path_ID im node table
gemappt.
Updating
Geschieht über die in SQL integrierte modify()-Funktion.
Beispiel:
update TripReports
set doc.modify(‘delete /doc/customer//saleslead[@year < 2000]‘)
Physisch wird dies genauso realisiert wie XQuery- und XPath-Ausdrücke. OrdPath ist sozusagen die
zugrundeliegende Update-Technologie
Oracle
The Big Picture
physische Speicherung
Hybrid
Im XMLSchema wird angegeben welche Teile in CLOBs gespeichert werden und welche geshreddet
werden sollen
Binary XML Storage
·
Tag tokenization
·
Werte werden in ihrem ursprünglichen Datenformat gespeichert
·
Teilbäume werden auf verschiedenen Seiten gespeichert
! ist allerdings im aktuellen Release noch nicht vorhanden
XML Schema
Für eine Spalte vom Typ „XMLType“ oder eine Tabelle vom Typ „XMLType“ kann ein bestimmtes Schema
erzwungen werden. Das Schema muss zunächst in die Datenbank eingefügt und dann als Schema angemeldet
werden. Anmeldung:
BEGIN
DBMS_XMLSCHEMA.REGISTERSCHEMA
(schemaurl=>'http://www.oracle.com/presentation.xsd',
schemadoc=>sys.UriFactory.getUri('/public/DOAG/presentation.xsd'));
END;
Nun können Dokumente eingefügt werden und auf dieses Schema validiert werden.
INSERT INTO "presentation1364_TAB" values(xmltype(
'<presentation xmlns:xsi=http://w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation= "http://www.oracle.com/presentation.xsd">
... some content ... </presentation> '));
Angegebenes Schema wird in der Datenbank gesucht und gegen das einzufügende Dokument validiert.
XML Index
Oracle stellt einen XMLIndex für XML Dokumente, welche im (C)LOB Format gespeichert sind.
Eine Zeile in der Indextabelle entspricht einem Knoten.
document id
dewey style order key
path id
value
5
1.2.3.1
#meal#menue
„Rührei“
3 sekundäre Indexe stehen desweiteren bereit:
PATH Index | POSITION Index | VALUE Index
XML Repository
Das Oracle XML Repository stellt eine Abstraktionsebene dar, welche es ermöglicht in der Datenbank gespeicherte
XML-Dokumente als Dateien im Dateisystem zu betrachten.
à Lesen und Bearbeiten der XML-Dokumente z.B. mit MSWord, FTP, HTTP etc. ist möglich
XML View
Aus objekt-relationalen Daten können nicht nur objekt-relationale Views sondern auch XML Views, also virtuelle
XML Dokumente erstellt werden. Dazu werden für SQL Funktionen für Publishing aus dem SQL/XML Standard
bereitgestellt.
einige dieser Funktionen:
XMLElement() - Element-Konstruktor
XMLForest() - Konstruktion eines Waldes von attributlosen Elementen
XMLConcat() - Zusammenfügen mehrere XML-Werte zu einem
create or replace view Emp_view of xmltype
with object id (extract(sys_nc_rowinfo$,'/Emp/@empno').getnumberval()) as
SELECT XMLElement("Emp", XMLAttributes(empno), XMLForest(e.fname ||' '|| e.lname AS "name",
e.hire AS "hiredate")) AS "result"
FROM emps e
WHERE salary > 20000;
<Emp EMPNO="2100"> <name>John Smith</name> <hiredate>24.05.00</hiredate> </Emp>
<Emp EMPNO="2200"> <name>Mary Martin</name> <hiredate>01.02.96</hiredate> </Emp>
XQuery
XQuerys und XPath-Ausdrücke werden in SQL-Funktionen verarbeitet. Einige Funktionen:
• ExistsNode()
• Extract()
• XMLSequence()
• XMLQuery()
• XMLTable() in der FROM Klausel
1. Beispiel extractValue()-Funktion:
SELECT a.lfd_nr,
extractValue(a.Adresse, '/Adr/Name')
FROM adressenliste a
2. Beispiel: integrierter XQuery auf einem XML View
SELECT XMLQuery(for $b in ora:view(„S_T“)/site/person
where $b/@id = „0“
return $b/name‘ returning content)
FROM dual;
XQuerys können aber auch alleine stehen.
Beispiel 3: Alleinstehender XQuery, in welchem die Dateisystem-Abstraktion ausgenutzt wird:
xquery for $i in doc("/docs/Accounting.xml")/Department/Employee
where $i/FirstName="Shelley"
return $i
Je nach der physischen Speicherung der XML Dokumente, wird der XQuery bzw. der XPath-Ausdruck anders
ausgewertet. Falls ein Index vorhanden ist, so wird dieser zur Optimierung eingesetzt.
·
CLOB
Ausdruck wird entweder über SAX oder über DOM abgearbeitet
·
Shredded
Ausdruck wird in SQL-Funktion umgeschrieben, welche auf den entsprechenden zugrundeliegenden
Tabellen ausgeführt wird
Updating
Auch dies geschieht über in SQL integrierte Funktionen (aus dem SQL/XML Standard). Auch diese Funktionen
werden intern gemäß der physischen Speicherung ausgeführt.
·
·
CLOB:
Dokument wird in DOM transformiert, verändert, zurücktransformiert und das alte Dokument überschrieben
Shredded:
Werte in den entsprechenden zugrundeliegenden Tabellen werden verändert
Funktionen:
UpdateXML(), DeleteXML(), InsertChildXML(), InsertXMLBefore(), AppendChildXML()
DB2
The Big Picture
physische Speicherung:
Das physische Modell ist eine hierarchische Repräsentation des XML Dokuments. (XML-Baum-Repräsentation)
•
•
•
•
Baum (Dokument) kann in Teilbäume (Regionen)
geteilt werden und auf verschiedenen Datenseiten
gespeichert werden.
Ein Region Index erlaubt beschleunigten Zugriff auf
gewünschte Regionen
Tagnamen werden auf StringIDs gemappt und durch
diese ersetzt. StringID-Index wird dazu erstellt.
Falls Dokument gegen Schema validiert wurde, so
werden die Daten in ihrem xs:datentyp abgespeichert
XML Schema
Für jedes XML Dokument einer Spalte kann ein (anderes!) XMLSchema verlangt werden.
Schema muss an der Datenbank angemeldet werden, dann können Dokumente eingefügt werden und gegen
dieses Schema validiert werden.
register xmlschema http://my.dept.com
from dept.xsd as departments.deptschema complete
insert into dept(deptdoc) values xmlvalidate(? according to xmlschema id departments.deptschema)
insert into dept(deptdoc) values xmlvalidate(?)
(hier wird das im XMLDokument angegebene Schema erst noch in der Datenbank gesucht)
XML Index
Der primäre Index in DB2 wird als “Value Index“ bezeichnet. Eine Zeile der Indextabelle entspricht einem Knoten
create index idx1 on dept(deptdoc) generate key
using xmlpattern ‘/dept/employee/name‘ as sql varchar(35)
Es werden nur die in „xmlpattern“ angegebenen Knoten indexiert.
RowID
7
identifiziert Dokument
innerhalb der Spalte
PathID
45FE22
id des Pfades aus
dem Path Index
NodeID
value
45
„Susi“
id des Knotens, nach
einem numbering scheme?
Xquery
XQuery wird über Funktionen in SQL integriert und umgekehrt!
1. XQuery-Funktionen in SQL, einige davon
• XMLQuery()
• XMLExists()
• XMLTable()
Beispiel xmlquery()-Funktion
SELECT deptID, xmlquery(‘for $e in $deptdoc/dept/employee
where $e/office = 344
return $e/name‘ passing by ref d.deptdoc as ‚deptdoc‘ returning sequence)
FROM dept d
2. SQL-Funktionen in XQuery
db2-fn:xmlcolumn |
db2-fn:sqlquery
1. Beispiel db2-fn:xmlcolumn:
for $e in db2fn:xmlcolumn(‚DEPT.DEPTDOC‘)/dept/employee
where $e/office = 344
return $e/name
2. Beispiel db2-fn:xmlcolumn:
for $e in db2-fn:sqlquery(‘SELECT DEPTDOC
FROM DEPT‘)/dept/employee
where $e/office = 344
return $e/name
DB2 hat separate parser für SQL und XQuery, benutzt aber nur einen query compiler für beide Sprachen.
Für XML gibt es einige neue Operatoren:
XScan - für XML Navigation
XIScan - für XML Index access
Xandor - für Joins auf Indexen
Falls ein Index vorhanden ist, so wird dieser zur Optimierung eingesetzt. Auch Statistiken Häufigkeiten von
Elementen, Attributen und Werten sollen zur Query-Optimierung eingesetzt werden.
Update
Bisher ist noch kein Update-Mechanismus in DB2 integriert. Einige Entwickler haben sich jedoch Gedanken
gemacht und Prozeduren geschrieben um Updates durchführen zu können.
Hier eine Variante: DB2XMLFUNCTIONS.XMLUPDATE
<name>Susi</name> wird durch <name>Tina</name> ersetzt
call DB2XMLFUNCTIONS.XMLUPDATE ( '<updates><update action="replace" col="1"
path="/x:customerinfo/x:name"> <name>Tina</name> </update> </updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? Where cid=1006',?,?);
Zusammenfassung
Alle Systeme stecken noch mitten in der Entwicklung, genau wie die Standards zu den einzelnen Funktionalitäten.
Parallelen in den einzelnen Systemen sind zu erkennen, dennoch sieht die Umsetzung teilweise ganz anders aus.
Zuviel technische Details wollen die 3 Firmen nicht verraten,
1. aus Wettbewerbsgründen
2. weil einiges noch gar nicht umgesetzt wurde
3. weil es kaum Erfahrungswerte mit den neuen Funktionalitäten gibt
Charakteristiken der einzelnen Systeme
Oracle:
- bisher noch keine effiziente physische Speicherung
- XMLDokumente können wie Dateien in Dateisystem benutzt werden
- XML Views können generiert werden
SQLServer:
- binäre Speicherung kann Größe des Dokuments reduzieren
- sämtliches Arbeiten mit XML-Dokumenten läuft über SQL-Funktionen
DB2:
- hierarchische Speicherung, Split des Dokuments in Regionen
- SQL in XQuery integrierbar, gemeinsame query engine
- bisher noch keine Möglichkeit XML Updates durchzuführen
Da XML zunehmend an Bedeutung gewinnt und fleißig an den Standards gearbeitet wird, darf man gespannt sein
wie sich die Systeme in nächster Zeit weiterentwickeln werden
Herunterladen