json

Datenaustausch auf die leichte Art

Oracle spricht JSON

Im Zeitalter von Big Data und IoT (Internet of Things) wird es immer wichtiger, Daten in ver­schiedenen Formaten und aus unterschiedlichen Schnittstellen möglichst performant und ohne großen Aufwand zu verarbeiten. Um diesen wachsenden Anforderungen gerecht zu werden, hat Oracle mit der Version 12.1.0.2 die native Unterstützung des JSON-Formats direkt in der Datenbank eingeführt - und damit genau dort, wo die Daten gespeichert und mit anderen Daten optimal und schnell verglichen bzw. verarbeitet werden können.

Was ist JSON?

Im Bereich von Web-APIs und Konfigurationen wird die Auszeichnungssprache XML zunehmend von einfacheren Formaten wie z. B. JSON ersetzt. JSON (JavaScript  Object Notation) ist ein leichtgewichtiges Datenaus­tauschformat zwischen Anwendungen, welches oft im Umfeld von Webanwendungen eingesetzt wird. Da JSON selbst ein gültiges JavaScript darstellt, kann es in einer JavaScript-Umgebung direkt ausgeführt und daher mit wenig Aufwand in ein JavaScript-Objekt überführt werden.

Die wesentlichen Eigenschaften von JSON sind eine übersichtliche Notation, ein geringer Overhead und eine gute Unterstützung durch eine Vielzahl von Programmier­sprachen.

JSON kann darüber hinaus auch als flexible Datenablage eingesetzt werden. Hierbei bieten sich Anwendungsfälle an, wo die Definition von festen Datenmodellen (relationale Schemata) nicht möglich bzw. nur schwer umsetzbar ist.

Das Datenaustauschformat JSON unterstützt Datentypen, ähnlich der Auszeichnungssprache XML, mit deren Hilfe eine flexible Darstellung der Daten mit Wiederholungs­gruppen oder Verschachtelungen möglich ist. Im Vergleich zu XML verfügt JSON aller­dings über deutlich weniger native Datentypen.

JSON in der Datenbank

Im Gegensatz zu XML wurde für JSON kein eigener Datentyp in der Oracle-Datenbank eingeführt. Die JSON-Dokumente werden in den herkömmlichen Datentypen wie VARCHAR2, CLOB oder BLOB gespeichert. Um sicher­zustellen, dass in einer Spalte nur JSON-Dokumente gespeichert werden, kann in so einem Fall ein Check-Constraint mit dem Ausdruck IS JSON angelegt werden . Derartige Spalten können über die Data Dictionary View USER_JSON_COLUMNS abgefragt werden.

Dokumentenorientierte Speicherung

Bei der Speicherung von JSON-Dokumenten in einer Oracle-Datenbank, handelt es sich genau genommen um eine dokumentenorientierte Speicherung, wie dies z. B. bei den dokumentenorientierten NoSQL-Datenbanken wie CouchDB oder MongoDB der Fall ist.

Der große Vorteil bei einer Oracle-Datenbank ist allerdings, dass die dokumentenorientierten JSON-Daten sehr ein­fach und schnell durch reine SQL-Mittel mit den relationalen Daten verknüpft und verarbeitet werden können. Außerdem bietet eine Oracle-Datenbank die gewohnten, zuverlässigen Funk­tionen wie z. B. Hochverfügbarkeit, Backup und Recovery, Sicherheit und Replikation, die bei den meisten NoSQL-Datenbanken nicht im vergleichbaren Umfang ausgeprägt sind. Umfangreiche Indizierungsmöglichkeiten, das ACID-Transaktionskonzept, Komprimierung und prozedurale Spracherweiterungen mit PL/SQL sind nur einige weitere Funktionalitäten, bei denen eine Oracle-Datenbank gegenüber den NoSQL-Datenbanken punkten kann.

Unterstützt wird der dokumentenorientierte Ansatz durch den Oracle REST Data Services (ORDS), der als Nachfolger des Oracle APEX Listener verkündet wurde. ORDS ist eine frei verfügbare Java-Applikation, die auf einem Application Server wie Weblogic oder Tomcat installiert werden kann. Für Entwicklungszwecke kann ORDS auch als Standalone Webserver betrieben werden. Eine wesentliche Besonderheit von ORDS ist die einfache Erstellung von REST-Services für Tabellen, Views, SQL-Queries oder PL/SQL-Objekte im JSON-Format (siehe Abbildung 4). Ein Client kann dabei über derartige REST-Service-Schnitt­stellen mit reinen HTTP-Aufrufen und ohne eine direkte Datenbankverbindung, relationale Daten im JSON-Format abfragen und JSON-Dokumente in der Datenbank verwalten.

Die flexible Speicherung von JSON-Dokumenten mit beliebigem Aufbau in einer relationalen Tabellenspalte eröffnet neben dem recht statischen relationalen Daten­bankmodell neue Möglichkeiten, um auf sich häufig ändernde Bestandteile flexibel reagieren zu können. Die native JSON-Unterstützung in einer Oracle-Datenbank kann dabei als flexible Ergänzung zum relationalen Datenbankmodell für die Datenablage angesehen werden.

JSON aus der Datenbank lesen

In einer Oracle-Datenbank gespeicherte JSON-Dokumente können mithilfe von SQL/JSON-Funktionen, vergleichbar mit XML und SQL/XML-Funktionen, gelesen bzw. beliebig extrahiert werden. Dabei wird der Zugriff auf JSON-Dokumente mithilfe von JSON-Path-Ausdrücken sicher­gestellt. JSON-Path ist vergleichbar mit XPath für XML, allerdings mit einigen Unterschieden in der Syntax.

Eine native Erzeugung von JSON-Dokumenten mit SQL-Mitteln anhand von relationalen Tabellendaten wird mit der Version 12.1.0.2 zwar noch nicht unterstützt, soll laut Oracle in einer zukünftigen Version aber möglich sein.

JSON und Indizierung

In einer Oracle-Datenbank gespeicherte JSON-Dokumente können zum einen über die herkömmlichen funktions­basierten Indizes indiziert werden. Zum anderen kann auf einer Spalte mit JSON-Dokumenten ein spezieller JSON-Volltextsuche-Index mit Oracle TEXT angelegt werden.

Ein funktionsbasierter Index wird vom SQL-Optimizer in der Regel nur dann verwendet, wenn die indizierte Funktion, genauso wie im Index angegeben, in einer WHERE-­Bedingung verwendet wird. Ein JSON-Volltextsuche-Index wird neben der Verwendung als JSON_TEXTCONTAINS-Funktion auch bei anderen Funktionen wie JSON_EXISTS oder JSON_VALUE genutzt. Somit ist der JSON-Volltextsuche-Index zwar universeller, aber bei der Pflege des
Index, z. B. bei DML-Operationen, deutlich langsamer und aufwendiger als ein funktionsbasierter Index.

JSON-Unterstützung in PL/SQL

JSON kann in PL/SQL mithilfe des PL/SQL-Pakets APEX_JSON verarbeitet werden. Diese Komponente ist allerdings Bestandteil von Oracle APEX 5.0 und muss demzufolge explizit installiert werden.

Das PL/SQL-Paket APEX_JSON verfügt dabei über Funktionen zum Parsen, Lesen und Erzeugen von JSON-Dokumenten, die auch vor der Oracle-Version 12.1.0.2 installiert und in PL/SQL verwendet werden können. Zusätzlich verfügt das APEX_JSON über Funktionen, mit deren Hilfe JSON-Dokumente aus Tabellendaten generiert werden können.

Stehen Daten im XML-Format zur Verfügung, so können diese direkt mit dem Paket in das JSON-Format umge­wandelt werden. Die Rücktransformation von JSON zu XML ist ebenfalls möglich. Der hierarchische Aufbau der Daten bleibt bei der Transformation wie erwartet erhalten. Werden in XML allerdings XML-Attribute verwendet, so führt eine Transformation in das JSON-Format zu einer un­gültigen JSON-Struktur, da diese Attribute in dem JSON-Format nicht unterstützt werden.

Betrachtet man in der Version 12.1.0.2 die Laufzeit der Funktionen zum Parsen von JSON-Dokumenten aus dem APEX_JSON-Paket, so stellt man fest, dass die SQL/JSON-Funktionen schneller als die Entsprechungen im APEX_JSON-Paket sind. Demzufolge sollte APEX_JSON zum Parsen von JSON-Dokumenten nur im Fall einer noch nicht vorhandenen Oracle-Datenbank­version 12.1.0.2 eingesetzt werden.

JSON vs. XML

Vergleicht man JSON mit der schon seit der Oracle Version 8i vorhandenen XML-Unterstützung, so stellt man einige Unterschiede, aber auch einige Gemeinsamkeiten fest. Abbildung 8 zeigt den Vergleich zwischen den JSON- und XML-Implementierungen in Oracle in einer tabellarischen Übersicht.

Fazit

JSON-Dokumente können ab der Version 12.1.0.2 in einer Oracle-Datenbank gespeichert und mit nativen SQL-Mitteln gelesen, interpretiert und verarbeitet werden. Für diesen Zweck kann wie gewohnt der volle SQL-Befehls­umfang einer Oracle-Datenbank verwendet werden.

Im Vergleich zu typischen NoSQL-Datenbanken, die eben­falls Daten im dokumentenorientierten JSON-Format speichern, kann Oracle bei der Auswertung der JSON-Daten mit verschiedenen analytischen Funktionen und bei der Verknüpfung der JSON-Daten mit relationalen Daten deutlich punkten. Ein Export der Daten aus einer NoSQL-Datenbank, eine Transformation und ein Import in eine Reporting-Datenbank für ein flexibles, datenübergreifendes Reporting ist bei einer Oracle-Datenbank im Vergleich zu NoSQL-Datenbanken im Regelfall nicht nötig.

Besonders interessant ist JSON für Daten, die nicht in einem relationalen Datenbankschema modelliert werden können oder sollen, wie es z. B. im Bereich von Big Data häufig der Fall ist. In solchen Fällen bringt JSON die nötige Flexibilität mit, um bei Änderungen des Datenmodells oder Unterstützung von verschiedenen Datenformaten das Datenbankschema nicht anpassen zu müssen.

Markus Fiegler
()

Kostenloses Kundenmagazin

Abbildungen


Die vollständigen Artikel mit allen Abbildungen finden Sie im blätterbaren PDF.
Eine Übersicht über alle Artikel sowie das PDF zum Download finden Sie im Inhaltsverzeichnis.

Impressum


Impressum der ORDIX® news 3/2015

Bildnachweis


© designercandies.net | 3D Cube Clusers
© freepik.net | 3D Cube
© ebrehe.deviantart.com | tech 4 free stuff addicts