1 / 44

Effiziente Evaluierung von XQuery-Anfragen über XML-Strömen

Effiziente Evaluierung von XQuery-Anfragen über XML-Strömen. Michael Schmidt, 05.11.2007 LS Datenbanken und Informationssysteme, Prof. Georg Lausen Graduiertenkolleg „Mathematische Logik und Anwendungen“. Inhalt. XQuery Auswertung auf XML-Strömen Motivation und Anforderungen

eaton-watts
Download Presentation

Effiziente Evaluierung von XQuery-Anfragen über XML-Strömen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Effiziente Evaluierung von XQuery-Anfragen über XML-Strömen Michael Schmidt, 05.11.2007 LS Datenbanken und Informationssysteme, Prof. Georg Lausen Graduiertenkolleg „Mathematische Logik und Anwendungen“

  2. Inhalt XQuery Auswertung auf XML-Strömen • Motivation und Anforderungen • Statische Analyse: Effiziente Projektion von XML-Dokumenten • Kombination statischer & dynamischer Analyse: Effiziente Minimierung von Hauptspeicherressourcen Christoph Koch, Stefanie Scherzinger, Michael Schmidt XML Prefiltering as a String Matching Problem. In Proc. ICDE 2008. To appear. Michael Schmidt, Stefanie Scherzinger, Christoph Koch Combined Static and Dynamic Analysis for Effective Buffer Minimization in Streaming XQuery Evaluation. In Proc. ICDE 2007.

  3. I. Motivation und Anforderungen Motivation • Verarbeitung von XML-Strömen gewinnt immer mehr an Bedeutung z.B. Börsendaten, Satellitendaten, Temperaturdaten … • Empfangsraten ggf. sehr hoch Zwischenspeichern auf Festplatte oft unmöglich • Herkömmliche DBMS ungeeignet, da • Daten üblicherweise phyikalisch gespeichert werden… • … und Zwischenspeichern zudem oftmals überflüssig ist

  4. I. Motivation und Anforderungen Motivation • Daten müssen im Hauptspeicher verarbeitet werden • Probleme: • Datenmengen können sehr groß werden • Darstellung von XML-Dokumenten im Speicher als DOM-Baum sehr platzaufwendig Effizientes Puffermanagement wird zur Schlüsselkomponente • Streaming Techniken auch sehr gut geeignet für in-memory Engines

  5. I. Motivation und Anforderungen Anforderungen an Pufferminimierung • Puffere lediglich die Daten, die auch zur Auswertung der Anfrage benötigt werden • Vermeide mehrfache Kopien der selben Daten im Hauptspeicher • Puffere die Daten nicht länger als notwendig

  6. I. Motivation und Anforderungen Projektion von XML Dokumenten • Puffere lediglich die Daten, die auch zur Auswertung der Anfrage benötigt werden A. Marian and J. Siméon Projecting XML Documents In Proc. VLDB’03, pages 213–224, 2003 S. Bréssan, B. Catania, Z. Lacroix, Y. G. Li and A. Maddalena Accelerating Queries by Pruning XML Documents TKDE, 54(2):211–240, 2005 V. Benzaken, G. Castagna, D. Colazzo, and K. Nguyen Type-Based XML Projection In Proc. VLDB’06, 2006 Projektion • Statische Analyse der XML-Query • Identifikation von Teilen des XML-Dokuments, die für die Anfrageauswertung relevant sind • Nicht relevante Teile des XML-Dokuments können wegprojiziert werden

  7. I. Motivation und Anforderungen article isbn isbn … … … … … … … Projektion von XML Dokumenten XQuery Pfade <q> { for $b in /bib/book where ($b/author=“A. Turing” and fn:exists($b/price)) return $b/title } </q> { /bib/book, /bib/book/author/ dos::node(), /bib/book/price, /bib/book/title/ dos::node() } XML-Dokument bib dos:=descendant-or-self (wählt Knoten und alle descendants aus) dos:=descendant-or-self book book author price title author price title … … … …

  8. I. Motivation und Anforderungen Existierende Ansätze • Analyse der XML-Query und Extraktion relevanter Pfade im Eingabedokument • Tokenizen des XML-Dokuments • Kompilieren eines Automaten, der für eingehende Tokens on-the-fly überprüft, ob diese relevant sind XQuery XML-Dokument <r> { /bib/book/title, /bib/book//author } </r> „<bib><article></article> <book><title>T</title> <author>A</author></book> </bib>“ Pfade { /bib/book/title, /bib/book//author }

  9. I. Motivation und Anforderungen Existierende Ansätze • Analyse der XML-Query und Extraktion relevanter Pfade im Eingabedokument • Tokenizen des XML-Dokuments • Kompilieren eines Automaten, der für eingehende Tokens on-the-fly überprüft, ob diese relevant sind XML Pfade ●/bib/book/title ●/bib/book//author <bib> <article> </article> <book> <title> T </title> <author> A </author> </book> </bib> {/bib/book/title, /bib/book//author} <bib> /bib●/book/title /bib●/book//author <article> <book> /bib/book●//author /bib/book●/title <title> <author> /bib/book●//author /bib/book/title● /bib/book●//author /bib/book//author●

  10. II. Projektion von XML-Dokumenten Optimierter Ansatz • Projektion ohne Zerlegung in Tokens • Lokalisierung der relevanten Pfade erfolgt durch effiziente String-Matching Algorithmen Exkurs: String Matching Techniken b e g i n in Text; Länge des Schlüsselworts = 5 Suche nach match b e g i n b e g i n b e g b i e n g i n b e g i b n e g i n S t r i n g m a t c h i n g f o r b e g i n n e r s 1 5 10 15 20 25 Ähnliche Techniken für parallele Suche nach mehreren Keywords!

  11. II. Projektion von XML-Dokumenten XML Prefiltering mit String Matching Techniken XQuery DTD <r> { /bib/book/title, /bib//author } </r> <!ELEMENT bib (article,book)> <!ELEMENT article (title*,author*)> <!ELEMENT book (title*,author*)> <!ELEMENT title #PCDATA> <!ELEMENT author #PCDATA> <!ELEMENT year #PCDATA> Pfade { /bib/book/title, /bib//author } bib article book title title … author … title … author … author title author „T1“ „T1“ „A1“ „A2“ „T1“ „T1“ „A1“ „A3“

  12. II. Projektion von XML-Dokumenten XML Prefiltering mit String Matching Techniken DTD <!ELEMENT bib (article,book)> <!ELEMENT article (title*,author*)> <!ELEMENT book (title*,author*)> <!ELEMENT title #PCDATA> <!ELEMENT author #PCDATA> <!ELEMENT year #PCDATA> Pfade { /bib/book/title, /bib//author } Suche „<article>“ Suche „</author>“ <author> <author> Suche „<bib>“ <title> Suche „<author>“ und „</article>“ <article> <bib> <title> </title> <author> </author> <article> <book> </article> </article> <book> <author> <author> <title> <book> <title> </title> <author> </author> </book> </book> </bib>

  13. II. Projektion von XML-Dokumenten XML Prefiltering using String Matching Techniques Vorkompilieren der Automaten/Sprungtabellen in Lookup-Tables: DFA Vokabular Action Kurzer, hocheffizienter Laufzeitalgorithmus, der die vorkompilierten Lookup-Tables nutzt

  14. II. Projektion von XML-Dokumenten XML Prefiltering using String Matching Techniques • Prototyp-Implementierung in C++ • Experimente • Setting • Core2 Duo IBMThinkPad Z61p • T2500 2.00GHz CPU mit 1GB RAM • Ubuntu Linux 6.06 LTS • Verschiedene Daten: XMark, Medline, ProtSeq • Verschiedene Dokumentgrößen: 1MB bis 5000MB

  15. II. Projektion von XML-Dokumenten XML Prefiltering using String Matching Techniques Projektion eines 5.000MB XMark Dokuments für verschiedene XMark Queries

  16. II. Projektion von XML-Dokumenten XML Prefiltering using String Matching Techniques TimeFail: >1 Stunde MemFail: >1GB Verbesserung von XQuery Engines durch Projektion Erfolgsquoten für 18 XMark Queries mit vs. ohne Projektion

  17. II. Projektion von XML-Dokumenten XML Prefiltering using String Matching Techniques Durchsatzverbesserung durch Projektion für XPath Queries MB/s • Datensätze: • Medline: M1-M5 • Protein Sequence: P1-P5 • Einfache XPath-Anfragen • Auswertung durch SPEX

  18. III. Kombination statischer und dynamischer Analyse Kombination Statischer und Dynamischer Analyse • Vermeide mehrfache Kopien der selben Daten im Hauptspeicher • Puffere die Daten nicht länger als notwendig Behauptung: Sowohl statische als auch dynamische Analyse erforderlich, um beide Ansprüche zu erfüllen Michael Schmidt, Stefanie Scherzinger, Christoph KochCombined Static and Dynamic Analysis for Effective Buffer Minimization in Streaming XQuery Evaluation In Proc. ICDE 2007, Istanbul

  19. III. Kombination statischer und dynamischer Analyse Das GCX-System Rollen Eingabestrom Puffer (Knoten, annotiert mit Rollen) Umgeschriebene XQuery (Rollen-Updates) XQuery Variablen -bindung Entfernen von Rollen, Aktive Garbage Collection Evaluator Ausgabestrom

  20. III. Kombination statischer und dynamischer Analyse Ableiten von Rollen XQuery <r> { for $bib in /bib return ( for $book in $bib/book for $title in $book/title return $title, for $author in $bib//author return $author ) } </r> Projektions-Baum r1 /bib r2 //author /book r4 /bib//author/dos::node() /descendant-or-self::node() /title Pfade r3 /bib/book/title/dos::node() { /bib/book/title/dos::node(), /bib//author/dos::node() } /descendant-or-self::node()

  21. III. Kombination statischer und dynamischer Analyse Verteilen von Rollen • Selektierte Dokumentknoten bekommen Rollen zugewiesen, wenn sie in den Puffer geladen werden • Unselektierte Knoten werden wegprojiziert XML Dokument Rollen r1 /bib r2 /bib/book r3 /bib/book/title/dos::node() r4 /bib//author/dos::node() { r1 } bib { r2 } book { r3 } { r4} title author

  22. III. Kombination statischer und dynamischer Analyse Umschreiben der XQuery: Rollenupdates <r> { for $bib in /bib return ( ( for $book in $bib/book ( for $title in $book/title return ( $title, signOff($title/dos::node(),r3) ), signOff($book,r2) ), for $author in $bib//author return ( $author, signOff($author/dos::node(),r4) ) ), signOff($bib,r1) ) } </r> Entfernt Rolle r3 vom Knoten, an den Variable $title derzeit gebunden ist incl. allen Descendant-Knoten XQuery <r> { for $bib in /bib return (for $book in $bib/book for $title in $book/title return $title, for $author in $bib//author return $author ) } </r> Rollen r1 /bib r2 /bib/book r3 /bib/book/title/dos::node() r4 /bib//author/dos::node()

  23. III. Kombination statischer und dynamischer Analyse Aktives Garbage Collection XQuery Input Stream <r> { for $bib in /bib return ( ( for $book in $bib/book ( for $title in $book/title return ( $title, signOff($title/dos::node(),r3) ), signOff($book,r2) ), for $author in $bib//author return ( $author, signOff($author/dos::node(),r4) ) ), signOff($bib,r1) ) } </r> <bib> <title> </title> <author> </author> </book> </bib> <book> Buffer {} { r1 } bib {} { r2 } book { r3 } {} {} { r4 } title author Output Stream <r> <title> </title> <author> </author> </r>

  24. III. Kombination statischer und dynamischer Analyse Die GCX Engine • Garbage Collected XQuery • Implementiert für ein mächtiges Fragment von XQuery • Verschachtelte for-loops • Child und descendant Axen • For–where–return expressions • If-expressions mit and, or, not, Existenzchecks • Aggregationen derzeit nicht unterstützt • Open Source (Berkeley Software Distribution Licence) • GCX Projektseite: http://dbis.informatik.uni-freiburg.de/index.php?project=GCX

  25. III. Kombination statischer und dynamischer Analyse Benchmarks GCX • Messung von Zeit- und Speicherverbrauch • Queries und Dokumente des XMark Benchmarks (angepasst) • Experimentelles Setting: • 3GHz CPU Intel Pentium IV mit 2GB RAM • SuSe Linux 10.0 • J2RE v1.4.2 für Java-basierte Systeme • 1 Stunde Zeitlimit pro Query • Benchmarks gegen verschiedene Systeme • FluX: In-memory Engine für Streaming XQuery Evaluation (Java) • MonetDB v4.12.0/XQuery v0.12.0: Secondary storage Engine (C++) • QizX/open v1.1: Freie in-memory XQuery Engine (Java) • Saxon v8.7.1: Freie in-memory XQuery Engine (Java)

  26. III. Kombination statischer und dynamischer Analyse Benchmarks GCX Laufzeit (s) XMark Q1 <query1> { for $s in /site return  for $p in $s/people return   for $pe in $pe/person return   if ($pe/person_id="person0")   then <result>{ $pe/name }</result>   else () } </query1>

  27. III. Kombination statischer und dynamischer Analyse Benchmarks GCX Speicherverbrauch (MB) XMark Q1 <query1> { for $s in /site return  for $p in $s/people return   for $pe in $pe/person return   if ($pe/person_id="person0")   then <result>{ $pe/name }</result>   else () } </query1>

  28. III. Kombination statischer und dynamischer Analyse Benchmarks GCX Speicherverbrauch (MB) Laufzeit (s) • XMark Q8: • Komplexer als Q1 • Join Query • Erfordert gewisse Menge an Pufferung Time Fail 100MB: MonetDB – Time Fail 200MB: GCX, FluxQuery, MonetDB

  29. Vielen Dank für Ihre Aufmerksamkeit!

  30. Additional Resources

  31. III. Kombination statischer und dynamischer Analyse Aktives Garbage Collection <query6> {  for $site in //site return    for $regions in $site/regions return      $regions//item} </query6> Buffer plot for XMark Q6 on 10MB input document According to the DTD: all regions occur at the beginning of the document

  32. Benchmark Queries (2) <query8> {  for $root in (/) return  for $site in $root/site return  for $people in $site/people return  for $person in $people/person return    <item> { ( <person>{ $person/name }</person>,      <items_bought> {      for $site2 in $root/site return      for $cas in $site2/closed_auctions return      for $ca in $cas/closed_auction return         for $buyer in $ca/buyer return         if ($buyer/buyer_person=$person/person_id)         then <result> { $ca } </result>         else () } </items_bought> ) } </item> } </query8>

  33. III. Kombination statischer und dynamischer Analyse Aktives Garbage Collection XQuery <r> { for $bib in /bib return (for $x in $bib/* return if (not(exists($x/price))) then $x else (), for $b in $bib/book return $b/title) } </r> 9 x article + 1 x book Dokument bib (book|article)* author title price 9 x book + 1 x article

  34. Benchmark Queries (1) <query1> { for $s in /site return  for $p in $s/people return   for $pe in $pe/person return   if ($pe/person_id="person0")   then <result>{ $pe/name }</result>   else () } </query1> <query6> {  for $site in //site return    for $regions in $site/regions return      $regions//item} </query6>

  35. Benchmark Queries (3) <query13> {  for $site in /site return    for $regions in $site/regions return      for $australia in $regions/australia return        for $item in $australia/item return          <item> {          (            <name> { $item/name } </name>,            <desc> { $item/description } </desc>          )          } </item>} </query13>

  36. Benchmark Queries (4) <query20> {  for $site in /site return    for $people in $site/people return      for $person in $people/person return        if (fn:not(fn:exists($person/person_income)))        then $person        else ()} </query20>

  37. Buffer Plot (1) <query6> {  for $site in //site return    for $regions in $site/regions return      $regions//item} </query6> Buffer plot for XMark Q6 on 10MB input document According to the DTD: all regions occur at the beginning of the document

  38. Buffer Plot (2) XQuery <r> { for $bib in /bib return (for $x in $bib/* return if (not(exists($x/price))) then $x else (), for $b in $bib/book return $b/title) } </r> 9 x article + 1 x book Dokument bib (book|article)* author title price 9 x book + 1 x article

  39. Buffer Plot (3) first partition of join partners: persons second partition of join partners: buyers <query8> {  for $root in (/) return  for $site in $root/site return  for $people in $site/people return  for$personin $people/person return    <item> { ( <person>{ $person/name }</person>,      <items_bought> {      for $site2 in $root/site return      for $cas in $site2/closed_auctions return      for $ca in $cas/closed_auction return         for$buyerin $ca/buyer return if ($buyer/buyer_person=$person/person_id)        then <result> { $ca } </result>         else () } </items_bought> ) } </item> } </query8> Buffer plot for XMark Q8 on 10MB input document

  40. The GCX Runtime Engine Buffer XQuery input stream node lookup garbage collection nodes/roles nextNode() getNext($x/π) Stream Preprojector Buffer Manager Evaluator node/eos node/NULL OK signOff($x/π,r) output stream

  41. System Architecture input stream input stream Stream Preprojector Projection Paths Roles Projection DFA (constructed lazily, assigns roles) Rewritten XQuery (role updates) Normalized XQuery Buffer (nodes & roles) role updates input XQuery Evaluator output stream

  42. II. Projektion von XML-Dokumenten XML Prefiltering mit String Matching Techniken <author> <author> </author> <article> <book> <book> <author> <author> <title> <title> </title> <author> </author> </book> </book> </bib> <bib><article> </article><book> … titles authors titles authors Suche „<article>“ Suche „<author>“ und „<book>“ Suche „</author>“ Suche „<author>“ und „<book>“ Suche „<title>“, „<author>“, „</book>“

  43. II. Projektion von XML-Dokumenten XML Prefiltering mit String Matching Techniken XQuery Pfade <r> { /bib/book/title, /bib//author } </r> { /bib/book/title, /bib//author } bib article book title title … author … title … author … author title author „T1“ „T1“ „A1“ „A2“ „T1“ „T1“ „A1“ „A3“ <bib><article> </article><book> … titles authors titles authors

  44. Exkurs: XML und XQuery XML-Dokument XQuery “/”: selektiert Kind-Knoten <bib> <book> <title>T1</title> <author>A1</author> </book> <book> <title>T2</title> <author>A2</author> </book> <article> <author>A3</author> </article> </bib> <q> { for $book in /bib/book where ($book/title=„T1“) return $book, for $author in /bib//author return $author } </q> “//”: selektiert Descendant-Knoten Ergebnis <q> <book> <title>T1</title> <author>A1</author> </book> <author>A1</author> <author>A2</author> <author>A3</author> </q>

More Related