400 likes | 502 Views
Hauptseminar: Datenbanksysteme und XML. Efficiently Publishing Relational Data as XML Documents. Dennis Säring. Inhaltsverzeichnis. 1. Motivation 2. kurze Wiederholung von XML 3. Ein Beispiel kurz erläutert mit Quellcode belegt
E N D
Hauptseminar: Datenbanksysteme und XML Efficiently Publishing Relational Data as XML Documents Dennis Säring
Inhaltsverzeichnis 1. Motivation 2. kurze Wiederholung von XML 3. Ein Beispiel kurz erläutert mit Quellcode belegt 4. Ausführliche Vorstellung der Alternativen 5. Beurteilung der Effizienz aller Alternativen 6. Abschließender Kommentar und Ansätze für die Zukunft 7. Referenzen 8. Diskussion
1. Motivation & Einführung • XML als kommender Standard, Daten im WWW zu veröffentlichen • Relationale Datenbanken als Industriestandard • Suche nach einer Lösung relationale Daten in XML – Form zu konvertieren
Was wird dazu benötigt ? I. Sprache für die Spezifizierung der Konvertierung von rel. Daten in XML II. Eine effiziente Implementation dieser Konvertierung
2. Wiederholung XML Semistrukturiert Tags kennzeichnen Elemente Elemente sind geschachtelt angeordnet
Beispiel <customer id=“C1“> <name> John Doe </name> <accounts> <account id=”A1”> 1894654 </account> <account id=”A2”> 3849342 </account> </accounts> <porders> <porder id=”P01” acct=”A2”> // first purchase order <date> 1 Jan 2000 </date> <items> <item id=”I1”> shoes </item> <item id=”I2”> bungee ropes </items> </items> <payments> <payment id=”P1” due Jan 15 </payment> <payment id=”P2” due Jan 20 </payment> <payment id=”P3” due Feb 15 </payment> </payments> </porders> <porder id=”P02” acct=”A1”> // second purchase order … </porder> </customer> Customer ( id integer, name varchar(20) ) PurchOrder ( id integer, custId integer, acctId varchar(20), date varchar(10) ) Account ( id varchar(20), custId integer, acctnum integer ) Item ( id integer, poId integer, desc varchar(10) ) Payment ( id integer, poId integer, desc varchar(10) )
3. Einstieg Verwendung der bestehenden SQLanguage Verschachtelung durch SQL-Struktur Konstruktion von Tags durch SQL-Funktionen
Verschachtelte Struktur XMLAGG konkateniert XML Elemente Verwendung von XML Konstruktoren
XML-Konstruktor Parameter werden in festgelegte Tags eingebunden
4. Alternativen der Konvertierung Klassifizierung der Alternativen Tags müssen erstellt werden ( tagging ) Geschachtelte Struktur erstellen ( structuring ) Ort der Berechnung ( inside / outside )
Early Tagging, Early Structuring Stored Procedure (outside engine) • Startpunkt: root-Element • Iterative Schachtelung aller in Relation stehenden Elemente • Zu viele SQL-queries nötig ( overhead ) • Feste Ordnung beim join ( schlecht )
Correlated CLOB ( inside ) • Verwendung vieler queries umgehen, indem nur noch eine große query erstellt wird ( siehe Bsp. ) XML Fragmente werden als CLOBs ( Character Large Objects ) gespeichert ( teuer ) Feste Zuordnung ( correlated ) erfordert Schleifen zur Schachtelung
De-Correlated CLOB ( inside) keine feste Zuordnung Verwendung von outer joins auch Speicherung in CLOBs
Outer Join 2 od. Mehrere Tabellen werden durch einen Join zusammengefaßt Elemente die nicht der join-condition nicht entsprechen werden: Inner Join left / right Outer Join full Outer Join ( Outer Join )
Late Tagging, Late Structuring Unterteilung in 2 wesentliche Prozesse • Erstellen der relationalen Daten ( content creation ) Strukturieren und Tags schreiben ( structuring / tagging )
Content Creation: Redundant Relation • Zusammenfügen aller tables ( join all ) • Verwendung redundanter Prozesse • Man erhält redundante Daten Multiplikative Vergößerung ( schlecht )
Content creation: Outer Union ( unsorted ) • Ast wird separat geführt, keine Daten vom Nachbarn • Zusammenführung aller Daten am Ende • Immer noch Redundanz ( parent Daten ) • Nicht immer einheitliche Größe
PATH - NODE • Path - outer - union • Es wird am Pfad entlang entwickelt • Wiederholung von parent - Daten ( s.o. ) • Node - outer - union • Parent Daten direkt ins outer union schreiben • große Anzahl an Tupeln
Structuring/Tagging hash-basierter Tagger • Gruppierung der Elemente mittels Hash-Tabellen Tupel lösen und Tags setzten Effizient bei genügend Speicher
Grafik: Hash - Tables HashTable (Account) ??? ( AcctID,Typ) ??? ( AcctID,Typ) ??? ( AcctID,Typ) HashTable (Customer) HashTable (root) HashTable (PurchaseOrd) Account ( custID,Typ) Customer ( ID,Typ) Item ( PoID,Typ) PurchaseOrder ( custID,Typ) Payment ( PoID,Typ) Tupel lösen und Tags nach Typ setzten tagging hashing
Late Tagging, Early Structuring • Late Tagging, Late Structuring benötigt viel Speicher um effizient zu sein • Sortierung bereits im content creation
Structured content: Sorted Outer Union • Folgende Dinge müssen beachtet werden • Parent Informationen kommen vor den child Infos • Alle Informationen eines Knotens gehören zusammen • Sortierung des path-outer-union Ergebnis ( sortiert nach Ids )
Sorted Outer Union ( type, custId, custName, acctId, acctNum, poId, poAcct, poDate, itemId, itemInfo, payId, payInfo ) ( type, custId, custName, acctId, acctNum, poId, poAcct, poDate, itemId, itemInfo, payId, payInfo ) Order by: custId, poDate, poId, acctId, payId, itemId Outer Union
Tagging Sorted Data: Constant Space Tagger • Tags werden sofort nach auslesen gesetzt • Nur Parent Id merken um Tag zu schließen Platz - konstant in Anzahl der Levels
5. Beurteilung der Effizienz • Verwendetes System • DB2 • Pentium 366 / 256 MB / Win NT 4.0 • alle Funktionen innerhalb der Maschine
Messvorbereitung Verwendung ausgeglichener Strukturen Einführung von Parametern
Ergebnisse ( inside - outside ) • Inside Engine (query fan out) Outside Engine • Weitere Test inside the engine !
Was kostet Wieviel ? Execution Bind out Tagging XML File
Änderung am query fan out mehr joins corr CLOB am schlechtesten ( loop joins ) unsorted besser als sorted o-u-plan
Änderung an derquery depth Fehler des rel. Optimierers Sortierung nach XMLAGG ( CLOB )
Änderung an der number of roots kaum Auswirkungen correlated CLOB
Änderung an der number of leaf tuples (+) Speicher: kaum Auswirkung (-) Speicher: unsort.o-u => kein Ergebnis
Vergleich path & nodeouter union • (+) Speicher: path outer union • weniger Tupel müssen gebildet werden • (-) Speicher: node outer union • mehr redundante Daten • overhead beim Auslagern
Zusammenfassung der Ergebnisse • Inside the engine ist effizienter • Bei genügend Speicher liegen die Unsorted Outer Union Ansätze vorn • Zu wenig Speicher: Sorted Outer Union
Überblick: Alternativen Early Tagging Late Tagging Inside Engine Inside Engine De-Correlated CLOB Sorted Outer Union(Tagging inside) Correlated CLOB EarlyStructuring Outside Engine Outside Engine Sorted Outer Union(Tagging outside) Stored Procedure Inside Engine Unsorted Outer Union(Tagging inside) Outside Engine LateStructuring Unsorted Outer Union(Tagging outside)
6. Kommentar und Zukunft Parallelmaschinen Laufzeitoperatoren innerhalb der engine Speicherverwaltung Tagger verbessern ( tiefe Strukturen )