Native XML-Datenbank

eXist-db

eXist-db ist eine native XML-Datenbank, die Daten in nativem XML verwaltet und somit für eine kinderleichte Ablage, Weiterverarbeitung und Bereitstellung von XML-Daten geeignet ist.

Was ist eXist-db?

Die eXist-db ist ein in Java implementierte NoSQL-Datenbank, die als freie Software zur Verfügung steht. Das Projekt wurde im Jahr 2000 durch Wolfgang Meier gegründet und wird seit 2001 als Open-Source gemeinschaftlich weiterentwickelt. Die erste Major-Version erschien im Jahre 2006.

Die Datenbank läuft innerhalb der Java Virtual Machine und kann deshalb unabhängig vom Betriebssystem eingesetzt werden. Die Daten werden als XML in Baumstruktur dargestellt. Als Abfragesprache dient XQuery (XML Query Language) oder XPath (XML Path Language). Für Transformationen wird XSLT (Extensible Stylesheet Language Transformations) verwendet.

Die folgenden Komponenten gehören zum logischen Datenmodell der eXist-db:

  • Collections (Datei-Sammlungen)
  • Dokumente
  • Nutzer
  • Nutzergruppen
  • Indizes
  • Blobs (binary large objects)

Welche Vorteile hat eXist-db?

Natives XML

Das Abspeichern einer Datei ist verhältnismäßig einfach: die XML-Dokumente werden eingelesen und indiziert abgelegt, wobei Art und Umfang der Indizierung bei Bedarf detailliert festgelegt werden können. Im Vergleich zu SQL-Datenbanken, bei denen in der Regel eine Aufteilung der zusammengehörenden Daten in verschiedene Tabellen erfolgt, können XML-Dokumente in ihrer nativen Struktur abgelegt werden. Dies ermöglicht einen direkten Zugriff auf jede Strukturebene des Dokuments. Die Daten werden als Knotenreferenzen bereitgestellt, die dann beispielsweise zu neuen Datenstrukturen zusammengefügt werden können. 

Indizierung

Zur Indizierung der Dokumente wird Apache Lucene verwendet. Die Indizierung kann nach Texten, Attributen und/oder für eine Volltextsuche erfolgen und so optimiert für den jeweiligen Anwendungszweck.

Schnelle Antwortzeiten

Die Speicherung von XML-Daten ist einfach und performant. Die Datenzugriffe können über die Nutzung des Indexes oder indexfrei erfolgen. Der geringe Performance-Unterschied zwischen den beiden Zugriffsvarianten zeigt, dass der XQuery-Interpreter den Zugriff optimiert und somit die Antwortzeiten verkürzt werden.

Eine besondere Stärke der eXist-db zeigt sich beim Auslesen ganzer Datenstrukturen aus der Datenbank. Statt nur einzelne Felder auszulesen, ermöglicht die eXist-db sehr große Transaktionen, die effektiv abgearbeitet werden. Jedes XQuery-Script wird dabei in einer Transaktion bearbeitet.

Bei schreibenden Zugriffen auf die Datenbank werden die Daten zunächst als Stapel gesammelt und erst am Ende in die XML-Dokumente eingetragen, so dass kein Dirty Read möglich ist.

Collections

Collections enthalten XML-Dokumente, die dem selben Schema entsprechen. Die Dateien werden in Sammlungen hierarchisch organisiert. Neben der Übersichtlichkeit ergibt sich daraus ein weiterer Vorteil: Das Suchen, Abfragen, Bearbeiten oder Löschen von Daten ist auf der Ebene einzelner Collections möglich. Außerdem lassen sich Berechtigungen für Nutzer und Nutzergruppen auf dieser Ebene festlegen.

Besonderheiten gegenüber anderen Anwendungen

  • Natives XML - Verwendung von Standard XSLT, XSDs, DTDs
  • NoSQL
  • Suchindizierung
  • Interoperabilität
  • Möglichkeit zur Erweiterung durch vorhandene oder selbst geschriebene Add-ons

Durch die Verwendung von Standard-XML lässt sich die eXist-db sehr gut in bestehende Datenprozesse integrieren. Dabei können auch bestehende XLSTs, XSDs oder DTDs weiter verwendet werden, während die Übergabe der Daten über Standard-Schnittstellen (z. B. REST) sehr einfach ist.

Über XQuery lassen sich so leicht Transformationen oder Abfragen auf die bestehenden Daten ausführen, die sich mit Hilfe von Modulen sogar in Applikationen oder REST-Schnittstellen gießen lassen. Auch SQL-Abfragen können im Skript definiert werden.

Features

Allgemein

  • XQuery, XPath
  • XSLT
  • XML-RPC
  • Eingebaute XQuery-IDE (eXide)
  • Backup-Funktionalität

Admin-Oberfläche

  • Verwaltung von Collections und Dateien
  • Indizierung
  • Auswertungen (Monitoring, Profiling)
  • Benutzer- und Rechteverwaltung

Schnittstellen

  • REST
  • SOAP

Wann ist eXist-db möglicherweise nicht die richtige Wahl?

eXist-db ist ungeeignet, wenn sehr viele unabhängige und kleine Updates auf einem großen und unteilbaren Datenbestand durchgeführt werden müssen. Aufgrund der Tatsache, dass die Daten alle miteinander verknüpft und hierarchisch angeordnet sind, sind Updates relativ aufwendige Operationen und benötigen mehr Zeit.

Schreibende Zugriffe sind deshalb grundsätzlich aufwendiger. Sie können allerdings effektiver abgearbeitet werden, wenn die geschriebene Datenmenge relativ groß gegenüber dem vorhandenen Datenvolumen ist. 

Anwendungsszenarien

  • Ablage von XML-Daten
  • Auswertung und Weiterverarbeitung von XML-Daten (Transformation)
  • Generierung von XML aus anderen Datenquellen (z.B. SQL-Datenbanken)
  • Validierung von XML-Dateien
  • Bereitstellung von Daten mit XML als Austauschformat