XML-Verarbeitung mit der XML

Werbung
Fakultät Elektronik und Informatik
Wintersemester 2016 / 2017
XML-Verarbeitung mit der
XML-Datenbank BaseX
Ken Brucksch
Nicolai Klingler
Betreuer:
Prof. Dr. Küpper
16. Januar 2017
Inhaltsverzeichnis
1 Vorwort
3
2 Einführung
2.1
4
Rückblick
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1.1
XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1.2
XSLT
4
2.1.3
XQuery
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Aktuelle Situation
2.3
Motivation
4
. . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3 Grundlagen
6
3.1
XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.3
XQuery
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.3.1
XQuery Update Facility 3.0 . . . . . . . . . . . . . . . . .
8
3.3.2
XQuery Full Text 3.0
8
. . . . . . . . . . . . . . . . . . . .
4 BaseX
9
4.1
Erhältliche Ausführungen
. . . . . . . . . . . . . . . . . . . . . .
4.2
Unterstütze Standards . . . . . . . . . . . . . . . . . . . . . . . .
9
4.3
Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.4
Technologie
10
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Evaluierung der Ezienz
9
11
5.1
Gerät / Umgebung . . . . . . . . . . . . . . . . . . . . . . . . . .
11
5.2
Testaufbau
12
5.3
Datenbank befüllen . . . . . . . . . . . . . . . . . . . . . . . . . .
12
5.4
Datensätze abfragen
. . . . . . . . . . . . . . . . . . . . . . . . .
13
5.5
Datensätze manipulieren . . . . . . . . . . . . . . . . . . . . . . .
14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Fazit / Ausblick
16
7 Anhang
17
7.1
A: createCatalog.sh . . . . . . . . . . . . . . . . . . . . . . . . . .
17
7.2
B: Querys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2
1 Vorwort
Seit den 1970er Jahren gelten die relationalen Datenbanksystemen auf dem
Markt als Standard. Doch mit den NoSQL-Datenbanksystemen sind echte Alternativen erschienen.
Eine dieser Systemgattungen, welches einen genaueren Blick lohnt, sind die
XML-Datenbanksysteme und im Besonderen BaseX.
Die XML-Datenbanksysteme unterstützen im Vergleich zu anderen dokumentorientierten Datenbankensystemen einen Groÿteil der standardisierten Abfragesprachen wie XPath und XQuery. BaseX besitzt eine hohe Standardkonformität
der W3C-Empfehlungen und Erweiterungen.
Zudem bietet BaseX durch seine integrierte Benutzeroberäche eine einfache
Bedienung und gute Übersicht zum Analysieren der Daten.
3
2 Einführung
BaseX wurde im Jahr 2005 von Christian Grün an der Universität Konstanz ins
Leben gerufen und ist ein plattformunabhängiges XML-Datenbankmanagementsystem.
Es ist mittlerweile ein Open-Source-Projekt und wird von einer Community auf
GibHub entwickelt. Dieses System wird hauptsächlich zur Speicherung, Anfrage
und Visualisierung groÿer XML-Dokumente und -Sammlungen verwendet.
2.1
Rückblick
Seit nun mehr als 20 Jahren ist XML ein Standard in der IT-Welt, welcher nur
4 Jahre nach seinem geistigen Vorgänger HTML die Bühne betrat. Und der
elegante Ansatz, welcher Inhalt und Struktur zu einer Einheit verschmelzen lieÿ
und dadurch sowohl leicht vom menschlichen Auge als auch von Programmen
analysiert werden kann, ndet Anklang.
2.1.1
XPath
XPath ist ein Abfragesprache um Elemente eines XML-Dokuments abzufragen
und ist seit 1999 ein Standard des W3-Konsortiums. Auch die XPath-Ausdrücke
sind eben so eektiv wie intuitiv.
Solche ein Ausdruck adressiert Pfade innerhalb eines XML-Dokuments, welches
dabei als Baum, ähnlich wie das Linux-Dateisystem, betrachtet wird.
2.1.2
XSLT
Zusammen mit XML und XPath bildet XSLT die Grundlage. Dabei werden
XML-Daten statisch abgelegt und in relationale Datenbanken persistiert. Dafür
ist aber eine aufwändige Aufbereitung von XML in das relationale Modell nötig.
XSLT kann Daten aufbereiten, persistiert sie aber nicht in eine Datenbank.
2.1.3
XQuery
XQuery füllt diese Lücke, da es in der Lage ist XML-Daten in Datenbanken zu
schreiben. Seit 2005 gilt es ebenfalls als Standard. Wie auch XSLT baut XQuery
auf XPath auf und ist somit Abwärtskompatibel. Jeder XPath-Ausdruck ist auch
ein gültiger XQuery-Ausdruck. Zudem ist XQuery aber auch eine funktionale
Script-Sprache, mit der umfangreiche Programme geschrieben werden können.
4
2.2
Aktuelle Situation
Die XML-Standards haben sich im Bereich des Datenaustausches durchaus etabliert. In Sachen Datenhaltung hingegen noch keinen durchschlagenden Erfolg
zu verbuchen. Dies liegt vermutlich daran, dass der Umstieg von einem gut
funktionierenden auf ein unbekanntes, aber ebenso gut funktionierendes Konzept sehr viel Mut erfordert und deshalb nur dann gemacht wird, wenn es triftige
Gründe für eine solche Umstellung gibt. Auch muss im Fokus stehen welche Anforderung für das System Priorität haben.
2.3
Motivation
Ziel dieser Arbeit besteht darin den Horizont in Bezug auf Datenbanksysteme
zu erweitern und ernsthaft zum Nachdenken anregen soll, ob ein Umstieg auf
ein alternatives Datenbankkonzept oder die erstmalige Verwendung einer solchen Datenbank für ein neues Projekt sinnvoll erscheinen könnte.
Des weiteren soll erarbeitet werden, ob der produktive Einsatz von BaseX empfehlenswert ist und wie sich das Datenbanksystem in Sachen Ezienz und Benutzerfreundlichkeit im produktiven Einsatz verhält.
5
3 Grundlagen
Die bereits vorgestellten Standards sind Teil der Grundlage für das Konzept
der XML-Datenbanken. Diese Datenbanken zeichnen sich dadurch aus, dass sie
ihre Datensätze in XML-Dokumenten speichern und diese dann indexieren und
ezient durchsuchen können. Dadurch gehören sie zu den dokumentorientierten
Datenbanksystemen. Die Abfragemethoden solcher Datenbanken gehen meist
über den SQL Standard hinaus. Gewöhnlich werden bei den meisten bekannten
Datenbanken die Daten in tabellarischer Form gespeichert. NoSQL soll dabei
eine Alternative zu den herkömmlichen relationalen Datenbanken darstellen.
Dabei soll dies kein kompletter Gegensatz zu SQL sein, denn wie der Name
schon sagt steht das Modell für "not only SQL", zu Deutsch also "nicht nur
SQL".
3.1
XML
XML (Extensible Markup Language) ist eine Computersprache zur hierarchisch
strukturierten Darstellung von Daten als Textdateien. Diese Textdateien werden
hauptsächlich zum plattformunabhängigen und programmunabhängigen Austausch von Daten verwendet.
Sie gilt seit 1996 als Standard und das World Wide Web Consortium (W3C) hat
2008 die fünfte Auage der XML-Spezikation veröentlicht. Diese Spezikation beschreibt XML als eine Metasprache, die durch strukturelle und inhaltliche
Einschränkung systemspezische Sprachen zum Datenaustausch deniert. Die
Einschränkung geschieht durch eine DTD-Datei oder ein XML Schema.
<?xml
v e r s i o n ="1.0"? >
<x s : schema
x m l n s : x s=" h t t p : / /www . w3 . o r g / 2 0 0 1 /XMLSchema">
<x s : e l e m e n t
name=" c a t a l o g ">
<x s : complexType>
<x s : s e q u e n c e >
<x s : e l e m e n t
name="book "
m i n O c c u r s ="1"
maxOccurs="unbounded">
<x s : complexType>
<x s : s e q u e n c e >
<x s : e l e m e n t
name=" a u t h o r "
<x s : e l e m e n t
name=" t i t l e "
t y p e =" x s : s t r i n g "/>
t y p e ="x s : s t r i n g "/>
<x s : e l e m e n t
name=" p r i c e "
t y p e =" x s : d o u b l e "/>
</ x s : s e q u e n c e >
<x s : a t t r i b u t e
name=" i d "
</ x s : complexType>
</ x s : e l e m e n t >
</ x s : s e q u e n c e >
</ x s : complexType>
</ x s : e l e m e n t >
</ x s : schema>
6
t y p e =" x s : s t r i n g "
u s e =" r e q u i r e d "/>
So sieht ein XML-Schema für ein Katalog, der mindestens ein Buch enthält.
Diese Datei wird unter dem Namen catalog.xsd abgelegt. Im Bezug auf relationale Datenbanken könnte man es auch als sehr einfaches relationales Modell
betrachten.
Der Datensatz an sich wäre dann eine dem Schema entsprechendes XMLDatei. Solch eine Datei könnte wie folgt aussehen:
<?xml
v e r s i o n ="1.0"? >
<c a t a l o g >
<book
i d ="b k 1 0 1">
<a u t h o r >G a m b a r d e l l a ,
Matthew</a u t h o r >
< t i t l e >XML D e v e l o p e r ' s
Guide </ t i t l e >
< p r i c e >20.45 </ p r i c e >
</book>
<book
i d ="b k 1 0 2">
<a u t h o r >R a l l s ,
< t i t l e >M i d n i g h t
Kim</a u t h o r >
Rain </ t i t l e >
< p r i c e >15.95 </ p r i c e >
</book>
</ c a t a l o g >
3.2
XPath
Wie bereits erwähnt adressiert XPath Teile eines XML-Dokuments. Mit dieser
Sprache kann man also einen Teil des XML-Dokuments einfach abfragen. XPath
ist seit dem 8.April.2014 in der Version 3.0 standardisiert.
Dieser Ausdruck liefert den Titel des Buches mit der ID bk101:
/ c a t a l o g / book [ @id="b k 1 0 1 " ] / t i t l e
Mit XPath haben wir die Möglichkeit einfache Abfragen an die XML-Datenbank
zu tätigen. Vergleichbar wäre dies mit einem einfachen SELECT-Statement in
SQL. Die XPath-Ausdrücke greifen dabei nur auf eine einzelne XML-Datei zu,
nicht wie SQL auf mehrere Tabellen. Ein Join wie bei SQL ist hier nicht möglich, allerdings lässt sich eine SQL-Tabelle nicht ganz mit einer XML-Datei vergleichen, da sich die Struktur deutlich unterscheidet. Doch eine XML-Datenbank
wird erst dann interessant wenn die Abfragen nicht nur auf ein einzelnes Dokument zugreifen kann sondern eine Abfrage ihre Informationen aus mehreren
Dokumenten ziehen kann. Auÿerdem bietet XPath zwar die Möglichkeit Daten
zu lesen, jedoch nicht Daten in eine Datei oder Datenbank zu schreiben.
7
3.3
XQuery
Mit XQuery bietet sich, seit es als Standard im Jahre 2005 eingeführt wurde,
eine Möglichkeit schreibend auf XML-Dokumente zuzugreifen. Derzeit ist die
aktuellste Recommendation die Version 3.1, vom 13.Dezember.2016. XQuery
baut auf XPath auf, aber im Gegensatz dazu ist es auÿerdem möglich Datensätze aus unterschiedlichen XML-Dokumenten abzufragen. Das ist im Bezug
auf relationale SQL-Datenbanken mit Verbundoperationen wie Join zu vergleichen. Die zugrunde liegende Datenstruktur in XQuery ist die Sequenz. Sie
bildet eine geordnete Liste mit beliebig vielen enthaltenen Elementen ab. Diese Sequenzen können auch Duplikate enthalten. XQuery bietet Funktionen zur
Abfrage von Kardinalitäten solcher Sequenzen an. Da XQuery nicht nur eine
Abfrage-Sprache sondern auch eine funktionale Script-Sprache ist bietet sie die
Möglichkeit zur Verwendung von Variablen wie es auch in anderen Programmiersprachen der Fall ist. Diese Variablen beginnen in mit dem $-Präx. Des
weiteren stehen auch Funktionen zur Sortierung von Sequenzen zur Verfügung.
Ein kleines Beispiel-Skript welches alle Titel von Büchern des obigen catalog.xml, die mehr als 16A
C kosten, sortiert ausgibt könnte wie folgt aussehen:
for
$book
in
d o c ( " c a t a l o g . xml " ) / c a t a l o g / book
where
$ b o o k / p r i c e >16
order
by
return
$book / t i t l e
$book / t i t l e
Hier sieht man das sich der Syntax von XQuery stark an bekannte Sprachen
wie SQL und C anlehnt.
3.3.1
XQuery Update Facility 3.0
Die Update Facility in der Version 3.0 ist eine XQuery Erweiterung, die vom
W3-Consortium als Standard veröentlicht wurde. Durch diese Erweiterung ist
es möglich persistente Änderungen an einer Instanz eines XQuery- oder XPathModells 3.0 vorzunehmen. Um zu begreifen wie essenziell diese Funktion für
eine Datenbank ist stelle man sich einfach eine gewöhnliche relationale SQLDatenbank vor, die keine Möglichkeit bietet vorhandene Datensätze zu persistent zu manipulieren.
3.3.2
XQuery Full Text 3.0
XQuery beinhaltet auch ohne diese Erweiterung eine rudimentäre VolltextSuche. Doch für komplexe Volltext-Suchen sind Syntax-Erweiterungen von XQuery nötig. Dies übernimmt die XQuery Full Text 3.0 Erweiterung des W3-Consortiums.
Dieses Erweiterung bietet alle nötigen Funktionen um sehr komplexe VolltextSuchanfragen gegen eine XML-Datenbank zu tätigen.
8
4 BaseX
In diesem Kapitel wird das XML-Datenbanksystem BaseX genauer betrachtet.
Zur genaueren Betrachtung gehören auch eine Evaluierung mit Tests im kleineren Umfang um Aussagen bezüglich der Ezienz des System im Vergleich zu
herkömmlichen Datenbanksystemen machen zu können. Auf die Tests und ihre
Durchführung wird im weiteren Verlauf noch genauer eingegangen.
BaseX ist in Java implementiert und setzt eine Java Laufzeitumgebung in der
Version 7 voraus. Aktuell ist das System in der Version 8.5.3 verfügbar.
Es unterstützt folgende Dateiformate: XML, HTML, JSON, CSV, Text, Binärdaten. BaseX verwendet eine tabellarische Abbildung von Baumstrukturen für
die Speicherung von XML-Dokumenten. Eine Datenbank kann daher sowohl
aus einer einzelnen XML-Datei als auch durch eine Sammlung solcher Dateien
realisiert werden.
4.1
Erhältliche Ausführungen
BaseX ist ein plattformunabhängiges und sehr leichtgewichtiges Datenbanksystem. Es steht in verschiedenen Ausführungen zum Download bereit:
•
Windows Installer EXE-Datei
•
Standalone JAR-Datei
•
Webapplikation WAR-Datei
Auÿerdem existiert eine Server-Client Anwendung, die sowohl Benutzerverwaltung als auch Transaktionsmanagement beinhaltet. Zusätzlich hat die zuständige Community verschiedene vorgefertigte Docker-Images auf Dockerhub veröentlicht, damit die Anwendung von der Virtualisierungssoftware Docker als
Container betrieben werden kann.
4.2
Unterstütze Standards
BaseX unterstützt eine groÿe Bandbreite von wichtigen Standards:
•
XPath-Ausdrücke
•
XPath/XQuery 3.1
•
XQuery Update Facility 3.0
XPath/XQuery Full Text 3.0
Unterstützung der meisten EXPath-/EXQuery-Module
EXPath und EXQuery sind zusätzliche Erweiterungen der bereits vorgestellten
Standards.
9
4.3
Schnittstellen
Zudem sind für BaseX viele Schnittstellen implementiert damit das System möglichst vielfältig eingesetzt werden kann. Lässt man das Datenbanksystem lokal
laufen kann man die integrierte GUI dazu nutzen groÿe XML-Datei-Sammlungen
einfach und schnell zu analysieren und durch die Verwendung der ausführbaren
JAR-Datei ist dazu nicht einmal eine Installation nötig.
Wird das System als Webservice bereitgestellt ist es über folgende API`s erreichbar.
•
REST
•
WebDAV
•
XML:DB
•
XQJ
•
Java
•
C#
•
Perl
•
PHP
•
Python und andere Sprachen
4.4
Technologie
Die Funktionsweise dieses Datenbanksystems ist einfach zu verstehen. Die Datensätze selbst liegen in den XML-Dateien. Wird eine Datenbank aus einer
XML-Datei erstellt so wird die XML-Datei eingelesen, indexiert und zusätzliche Meta-Daten abgespeichert um schnelle Zugrie gewährleisten zu können.
Um XML-Daten verarbeiten zu können benötigt ein XML-Datenbanksystem
selbstverständlich einen XML-Parser. BaseX bietet hierfür zwei Möglichkeiten.
Da das gesamte System in Java implementiert ist kann zum einen der JavaDefault-Parser verwendet werden. Zum anderen bietet BaseX aber auch einen
zusätzlichen XML-Parser der für die Verwendung in XML-Datenbanksystemen
optimiert wurde. Die XPath-Accelerator-Kodierung und der Staircase-Join-Operator
dienen als Grundlage für die Beschleunigung von XPath-Lokalisierungsschritten.
Des Weiteren verfügt BaseX über zahlreiche Indexstrukturen, die die Anfragegeschwindigkeit von Pfadoperationen, Attribut- und Textvergleichen und Volltextsuchen beschleunigen.
In wie weit der zusätzliche XML-Parser einen Vorteil bietet wird sich aus den
Tests für die Evaluierung der Ezienz ergeben.
10
5 Evaluierung der Ezienz
Im folgenden Kapitel wird durch Tests im angemessenen Rahmen die Ezienz des BaseX-Datenbanksystems gemessen. Um die Ergebnisse der Evaluierung sinnvoll einordnen zu können werden die selben Eingaben-, Ausgaben- und
Update-Operationen auch an einer relationalen SQL-Datenbank durchgeführt.
Die SQL-Datenbank steht hierbei repräsentativ für die gängigen Datenbanksystemen in Produktion. Die Auswahl el hierfür auf die PostreSQL-Datenbank.
Sie ist ebenfalls ein Open-Source-Projekt und wird von der eigenen Community als die fortschrittlichste Open-Source-Datenbank bezeichnet. Die Tests für
die Datenbanken können natürlich nur für Datenmengen unterhalb des BigData-Bereichs sprechen. Die Systeme werden jeweils mit bis zu einer Millionen
Datensätzen befüllt, Daten abgefragt und Update-Operationen durchgeführt.
5.1
Gerät / Umgebung
Notebook:
Sony Vaio
Modellnummer:
SVE1512W1EB
CPU:
Intel i5 Quadcore, 4 x 2,5 GHz
RAM:
8GB DDR3
Festplatte:
1TB HDD
Betriebssystem:
Ubuntu 16.04 LTS
Docker-Version:
1.12.5
PostgreSQL-Version:
9.6.1
BaseX-Version:
8.5.3
Die PostgreSQL Datenbank wird in einem Docker-Container ausgeführt. Dabei wurde das ozielle Postgres-Image von Dockerhub verwendet.
Die BaseX Datenbank wird als ausführbare JAR-Datei direkt über die Konsole
des Betriebssystem gestartet.
11
5.2
Testaufbau
In beiden Datenbanksystemen wird eine Datenbank namens Catalog angelegt.
Um die Datenbanken zu befüllen wurde ein Shell-Skript (siehe Anhang) geschrieben, dem durch ein übergebenen Parameter mitgeteilt wird wie viele Einträge
erzeugt werden sollen. Dieses Skript erzeugt dann eine XML-Datei (catalog.xml)
und eine SQL-Datei (catalog.sql) mit INSERT-Anweisungen. Der erzeugte Katalog besteht also aus beliebig vielen Büchern mit einer ID, einem Titel, einem
Autor und einem Preis. Titel und Autor sind immer die gleichen Werte. Die
ID ist eine fortlaufende Nummer mit dem Präx bk. Der Preis eines Buches
wird durch Zufallszahlen generiert. Dabei kann ein Buch zwischen 0.00A
C und
49.99A
C kosten. Jedes mal wenn man das Skript ausführt erhält man also andere
Datensätze. Die Datensätze in XML und SQL sind dabei aber immer identisch.
5.3
Datenbank befüllen
Die Datenbanken werden mit unterschiedlich groÿen Datenmengen befüllt. In
SQL wird durch INSERT-Anweisungen die entsprechende Tabelle befüllt. In
XML wird die Datei ge-parst und indexiert. Die Befüllung wird mit 1.000,
10.000, 50.000, 100.000, 1.000.000 Datensätzen durchgeführt. Beide Systeme
bieten die Möglichkeit die Zeit, die für die Ausführung der Operationen nötig
sind, zu messen und anzuzeigen. Jede Befüllung wird drei mal vorgenommen
und als Ergebnis wird das arithmetische Mittel der drei Durchläufe verwendet.
Abbildung 1: Liniendiagramm zu Datensätze einlesen
12
BaseX weist beim Indexieren der Datei eine deutlich höhere Performance
als das PostgreSQL-System beim Persistieren des Katalogs auf. Der optimierte
Parser bringt zudem noch ein Leistungssteigerung. Man muss allerdings beachten das theoretisch die Zeit für das Ablegen der XML-Datei auf die Festplatte
mit ein berechnet werden muss.
5.4
Datensätze abfragen
Die Datenbanken werden mit 1.000.000 Datensätzen befüllt. Auf beide Systeme
werden zwei Arten von einfachen Abfragen gemacht. Es werden alle Bücher abgefragt, deren Preis über 49.95A
C liegt, und es werden einzelne Bücher anhand
der ID abgefragt. Die Abfrage aller Bücher mit einem Preis von über 49.95A
C
werden auf jeden System drei Mal ausgeführt und als Ergebnis wird das arithmetische Mittel betrachtet. Die Systeme liefern bei den vorhandenen Datensätzen
763 Bücher.
PostgreSQL
BaseX (Default Parser)
BaseX (optimierter Parser)
1. Messung
2. Messung
3. Messung
245 ms
204 ms
195 ms
1133.8 ms
1111.1 ms
1150.54 ms
1006.3 ms
1130.57 ms
963.59 ms
Ergebnis
214.67 ms
1131.81 ms
1033.49 ms
Tabelle 1: Datensätze abfragen (Ausgabe von 763 Bücher)
PostgreSQL weist hier eine deutlich bessere Performance als das XML-Datenbanksystem.
Der optimierte Parser bring zumindest eine leichte Verbesserung mit sich.
Um zu beobachte ob Abfragen anhand der ID des Buches unterschiedliche Zugriszeiten aufweisen wenn sich das gesuchte Buch am Anfang, in der Mitte oder
am Ende des Datensatzes bendet, werden die Bücher mit der ID 1.000, 500.000
und 999.999 abgefragt. Jede Messung wird wieder drei Mal vorgenommen und
das arithmetische Mittel als Ergebnis betrachtet.
ID
1.000
500.000
999.999
1. Messung
2. Messung
3. Messung
13 ms
14 ms
13 ms
14 ms
13 ms
12 ms
14 ms
13 ms
13 ms
Ergebnis
13.33 ms
13.33 ms
13.33 ms
Tabelle 2: Einen Datensatz abfragen mit PostgreSQL
13
ID
1.000
500.000
999.999
1. Messung
2. Messung
3. Messung
4.05 ms
2.04 ms
2.09 ms
3.33 ms
2.27 ms
1.92 ms
3.50 ms
2.54 ms
2.46 ms
Ergebnis
2.74 ms
2.51 ms
2.83 ms
Tabelle 3: Einen Datensatz abfragen mit BaseX (Default Parser)
ID
1.000
500.000
999.999
1. Messung
2. Messung
3. Messung
4.13 ms
2.58 ms
3.75 ms
3.49 ms
2.38 ms
2.73 ms
2.73 ms
2.00 ms
1.97 ms
Ergebnis
3.49 ms
2.90 ms
2.23 ms
Tabelle 4: Einen Datensatz abfragen mit BaseX (optimierter Parser)
Bei Abfrage nach Primärschlüssel weist BaseX ein bessere Performance auf.
Der optimierte Parser bringt dabei keine Verbesserung mit sich.
5.5
Datensätze manipulieren
Beim Manipulieren der Datensätze wird ähnlich wie beim Abfragen der Datensätze vorgegangen. Es werden eine Menge von Büchern und einzelne Bücher
im Preis reduziert. Jede Operation wird drei Mal ausgeführt und als Ergebnis
wird das arithmetische Mittel betrachtet. Bei der ersten Abfrage wird der Preis
von einem bestimmten Buch geändert, in der Datenbank wird also genau ein
Datensatz manipuliert.
PostgreSQL
BaseX (Default Parser)
BaseX (optimierter Parser)
1. Messung
2. Messung
3. Messung
28 ms
23 ms
25 ms
525.06 ms
487.07 ms
537.82 ms
547.22 ms
579.04 ms
574.25 ms
Ergebnis
25,33 ms
516.65 ms
566.84 ms
Tabelle 5: Einen Datensatz manipulieren - alle Tools im Vergleich
In der zweiten Abfrage werden alle Bücher die mehr als 49,95A
C kosten auf
39,95A
C reduziert. Bei den generierten Datensätzen sind 783 Bücher betroen.
PostgreSQL
BaseX (Default Parser)
BaseX (optimierter Parser)
1. Messung
2. Messung
3. Messung
286 ms
274 ms
254 ms
1348.09 ms
1443.6 ms
1375.44 ms
1315.71 ms
1334.2 ms
1324.03 ms
Tabelle 6: 783 Datensätze manipulieren - alle Tools im Vergleich
14
Ergebnis
271.33 ms
1389.04 ms
1324.65 ms
Hier werden beide Abfragen in einem Balkendiagramm gegenübergestellt:
Abbildung 2: Balkendiagramm zu Datensätze manipulieren
15
6 Fazit / Ausblick
Das XML-Datenbanksystem BaseX kann durchaus als ernst zunehmende Alternative für herkömmliche relationale Datenbanken betrachtet werden. Beide
Systeme bieten in unterschiedlichen Arten der Datenmanipulation bzw. Datenhaltung Vorteile bezüglich der Ezienz. Der optimale Einsatz des richtigen
Systems ist also abhängig von dem Anwendungsfall des Projekts.
Ein Beispiel für einen solchen Anwendungsfall wäre, wenn ein System das ohnehin seinen Datenaustausch über XML regelt und diese Daten zusätzlich noch
persistieren muss, so bietet sich ein XML-Datenbanksystem wie BaseX an. Da
die Daten nicht erst von XML zu SQL geparst werden müssen, sondern direkt
als Datensatz für die Datenbank verwendet werden kann, ist in diesem Fall eine
solche Nutzung vorteilhaft, besonders im Hinblick auf die Ezienz.
Wie die Testergebnisse zeigen bietet BaseX bei den Abfrageoperationen die mehrere Datensätze abfragen eine weniger gute Ezienz wie herkömmliche SQLSysteme, somit ist bei groÿen Abfragemengen die SQL-Datenbank die bessere
Wahl.
Durch seine zahlreichen Schnittstellen kann BaseX problemlos in eigene Systeme integriert werden, als Server-Client-Anwendung laufen, als Webanwendung
über eine REST-API erreichbar sein oder lokal auf der eigenen Maschine zum
laufen gebracht werden und bietet somit für beinahe jeden Anwendungsfall die
passende Lösung.
Allerdings kann BaseX nicht nur Daten verarbeiten wie man es von Datenbanksystemen erwartet. Es kann auch als Tool zur manuellen Verwaltung von
XML-Sammlungen verwendet werden und durch das integrierte Benutzerinterface lassen sich die Daten sehr einfach analysieren und durch Funktionen wie
Baumstruktur oder Tabellarische Ansicht übersichtlich darstellen.
16
7 Anhang
7.1
A: createCatalog.sh
#######################################
# Usage :
. / c r e a t e C a t a l o g . s h <#ENTRIES>
#
# Script
# for
to
create
testing
# with
read
xml
basex
and
and
vs .
write
sql
files
postgres
db
access .
#######################################
#!/ b i n / b a s h
set
−e
echo
' <? xml
echo
'< c a t a l o g > ' >>
echo
' create
author
echo
v e r s i o n ="1.0"? > ' >
table
catalog ( id
varchar (255) ,
' insert
f o r ( ( i d =1;
into
. / c a t a l o g . xml
. / c a t a l o g . xml
price
integer ,
float ,
c a t a l o g ( id ,
i d <= $1 ;
title
primary
title ,
author ,
varchar (225) ,
key
( id ) ) ; ' >
price )
./ catalog . sql
values
' >>
./ catalog . sql
i d ++))
do
p r i c e _ a=$ ( ($RANDOM % 5 0 ) )
p r i c e _ b=$ ( ($RANDOM % 1 0 0 ) )
echo
'
echo
'
< t i t l e >XML−Datenbanken </ t i t l e > ' >>
. / c a t a l o g . xml
echo
'
<a u t h o r >B r u c k s c h ,
. / c a t a l o g . xml
echo
'
echo
'
if
$ i d = $1
[
<book
i d ="bk ' $ i d ' " > ' >>
. / c a t a l o g . xml
Ken</a u t h o r > ' >>
< p r i c e > ' $ p r i c e _ a ' . ' $ p r i c e _ b ' </ p r i c e > ' >>
</book > ' >>
. / c a t a l o g . xml
]
then
echo
"(" $id " ,
'XML−Datenbanken ' ,
' " $ p r i c e _ a " . " $ p r i c e _ b " ' ) ; " >>
' Brucksch ,
Ken ' ,
./ catalog . sql
else
echo
"(" $id " ,
'XML−Datenbanken ' ,
' " $ p r i c e _ a " . " $ p r i c e _ b " ' ) , " >>
fi
done
echo
' </ c a t a l o g > ' >>
echo
' creation
. / c a t a l o g . xml
complete '
17
' Brucksch ,
./ catalog . sql
Ken ' ,
. / c a t a l o g . xml
7.2
B: Querys
XQuery :
for
$book
in
where
$book / p r i c e > 4 9 . 9 5
return
d o c ( " c a t a l o g " ) / c a t a l o g / book
$book
SQL :
∗
select
from
catalog
where
price > 49.95
XQuery :
for
$book
where
in
d o c ( " c a t a l o g " ) / c a t a l o g / book
$ b o o k / @id = " b k 5 6 5 "
return
$book
SQL :
∗
select
from
catalog
where
i d = 565
of
/ c a t a l o g / book [ @id="b k 1 0 0 " ] / t i t l e
XQuery :
replace
with
value
'HTML,
node
CSS und
JavaScript '
SQL :
update
catalog
set
t i t l e = 'HTML,
CSS und
JavaScript '
XQuery :
for
$book
where
return
in
d o c ( " c a t a l o g " ) / c a t a l o g / book
$book / p r i c e > 4 9 . 9 5
r e p l a c e ( $book / p r i c e ,
'30.00 ' ,
$book / p r i c e )
SQL :
update
catalog
set
p r i c e =59.95
18
where
price >
49.95;
where
i d =100
Literatur
1. Schoening, Harald. XML und Datenbanken : Konzepte und Systeme [Buch]
2. Michelle Paulson. Extensible Markup Language Wikipedia [Online]
https://de.wikipedia.org/wiki/Extensible_Markup_Language [Letzter Zugri: 12.01.2017]
3. Michelle Paulson. BaseX Wikipedia [Online]
https://de.wikipedia.org/wiki/BaseX [Letzter Zugri: 16.01.2017]
4. Ocial BaseX Wiki [Online]
http://docs.basex.org/wiki/Getting_Started [Letzter Zugri: 11.01.2017]
5. Michelle Paulson. XPath Wikipedia [Online]
https://de.wikipedia.org/wiki/XPath [Letzter Zugri: 14.01.2017]
6. Michelle Paulson. XQuery Wikipedia [Online]
https://de.wikipedia.org/wiki/XQuery [Letzter Zugri: 14.01.2017]
7. Michelle Paulson. XML-Datenbank Wikipedia [Online]
https://de.wikipedia.org/wiki/XML-Datenbank [Letzter Zugri: 28.12.2016]
8. John Snelson, Jim Melton. XQuery Update Facility 3.0 [Online]
https://www.w3.org/TR/xquery-update-30/ [Letzter Zugri: 15.01.2017]
9. Mary Holstege, Jim Melton. XQuery and XPath Full Text 3.0 [Online]
https://www.w3.org/TR/xpath-full-text-30/ [Letzter Zugri: 15.01.2017]
10. Dr. Christoph Gaukel. BaseX, eine XML-Datenbank [Online]
http://www.informatik-aktuell.de/betrieb/datenbanken/nosql-basex-einexml-datenbank.html [Letzter Zugri: 27.12.2016]
11. Stefan Brass. XML und Datenbanken [Online]
http://users.informatik.uni-halle.de/ brass/xml07/xmldb.pdf [Letzter Zugri: 16.01.2017]
12. Websiteentwicklung: XML: Aufbau eines XML-Dokumentes [Online]
https://de.wikibooks.org/wiki/Websiteentwicklung:_XML:_Aufbau_eines_XMLDokumentes [Letzter Zugri: 04.01.2017]
13. Dr. Markus Siepermann. XML [Online]
http://wirtschaftslexikon.gabler.de/Denition/xml.html [Letzter Zugri:
2.01.2017]
14. Oliver Klein. Datenbanken und XML [Online]
https://www.urz.uni-heidelberg.de/imperia/md/content/urz/programme/db_und_xml.pdf
[Letzter Zugri: 8.Januar.2017]
19
15. Thomas Begerow. XML-Datenbank [Online]
http://www.datenbanken-verstehen.de/lexikon/xml-datenbank/ [Letzter Zugri: 27.12.2016]
16. Kircher, Lukas. BaseX: Extending a native XML database with XQuery
Update [Online]
http://kops.uni-konstanz.de/handle/123456789/15488 [Letzter Zugri: 12.01.2016]
17. M. Scharwies. SelfHTML [Online]
https://wiki.selfhtml.org/wiki/XML [Letzter Zugri: 8.01.2016]
18. Prof. Dr. Gustaf Neumann. XML [Online]
http://www.enzyklopaedie-der-wirtschaftsinformatik.de/lexikon/technologienmethoden/Sprache/Auszeichnungssprache/XML [Letzter Zugri: 13.01.2016]
19. Basho Technologies. Erklärung von NoSQL-Datenbanken [Online]
http://de.basho.com/resources/nosql-databases/ [Letzter Zugri: 13.01.2016]
20. Wolfgang Klimt. Was Sie über NoSQL wissen sollten [Online]
http://www.computerwoche.de/a/was-sie-ueber-nosql-wissen-sollten,2528753
[Letzter Zugri: 16.01.2016]
21. XML in relationalen Datenbanksystemen. Uni Jena [Online]
http://www.informatik.uni-jena.de/dbis/lehre/ws2012/xml/5-XML%20in
%20relationalen%20Datenbanksystemen.pdf [Letzter Zugri: 6.01.2016]
20
Abbildungsverzeichnis
1
Liniendiagramm zu Datensätze einlesen
2
Balkendiagramm zu Datensätze manipulieren
. . . . . . . . . . . . . .
. . . . . . . . . . .
12
15
Tabellenverzeichnis
1
Datensätze abfragen (Ausgabe von 763 Bücher) . . . . . . . . . .
13
2
Einen Datensatz abfragen mit PostgreSQL . . . . . . . . . . . . .
13
3
Einen Datensatz abfragen mit BaseX (Default Parser)
14
4
Einen Datensatz abfragen mit BaseX (optimierter Parser) . . . .
14
5
Einen Datensatz manipulieren - alle Tools im Vergleich . . . . . .
14
6
783 Datensätze manipulieren - alle Tools im Vergleich
14
21
. . . . . .
. . . . . .
Herunterladen