/https://images.podigee-cdn.net/0x,svelSyTJeijvS959jhyRaQbeeyluZea9qJ8NuWxjlsb8=/https://main.podigee-cdn.net/uploads/u42006/57a7072c-dca3-4151-859f-b7cf3a83b621.png)
O wie Datenbank
Johannes Ahrends, Robert Marz, Oliver Pyka
Oracle und JSON: Vom CLOB über den nativen Datentyp zu Duality Views
SEP 1, 202611 MIN
/https://images.podigee-cdn.net/0x,sEmQIUxc3Wrn_zIqXp2ouuQ6YWm9yjYJgWzqt6T-KUD4=/https://main.podigee-cdn.net/uploads/u86950/1002269a-8c27-4fb2-8fa1-a42db284f1d1.png)
Description
Wie das Dokumentenformat des Internets in die relationale Welt kommt und warum die Duality Views ein echter Game-Changer sind.
Oracle und JSON: Vom CLOB über den nativen Datentyp zu Duality Views
Wie das Format des Internets in die relationale Welt kommt
JSON ist das Textformat mit den geschweiften und eckigen Klammern, das praktisch jeder schon einmal gesehen hat. Das Akronym steht für JavaScript Object Notation, entstanden Ende der 90er, um JavaScript-Objekte zu persistieren. Heute ist JSON die Lingua Franca des Internets. Jeder Webservice und jedes API spricht es. In Folge 005 fragt Johannes aus der DBA-Ecke, und Robert erklärt aus Entwicklersicht, wie dieses verschachtelte Dokumentenformat in eine relationale Datenbank kommt.
Der Einstieg ist überraschend einfach. JSON ist reiner Text, also passt es in jede Spalte, die Text speichern kann. Bis 4000 Zeichen reicht eine VARCHAR2-Spalte, im Extended Mode sogar bis 32.000. Für größere Dokumente liegt das CLOB nahe, doch Oracle rät davon ab. Der Grund ist die Kodierung. JSON liegt per Definition immer in UTF-8 vor, deshalb kann man sich den NLS-Layer und den CLOB-Overhead mit den doppelten Bytes pro Zeichen sparen und speichert besser im BLOB. Bis Oracle 21 war das die einzige Möglichkeit.
Ab Oracle 21 und fest mit 23, das mittlerweile als 26ai firmiert, gibt es einen eigenen Datentyp namens JSON. Intern speichert er im OSON-Format, das die Keys nach oben zieht und die Werte separat ablegt und intern verpointert. Spannend daran: Der Aufbau des OSON-Formats ist offen. Zum Aufnahmezeitpunkt war er über die quelloffenen Thin Driver für Python und JavaScript nachlesbar, inzwischen hat Oracle nachgelegt und OSON als eigenständige Spezifikation (Version 1.0) unter osonspec.org veröffentlicht, dazu eine Java-Referenzimplementierung auf GitHub unter der Universal Permissive License. Damit folgt Oracle MongoDB und PostgreSQL, die ihre Formate ebenfalls offengelegt haben. Zur Einordnung, weil Robert das im Podcast verkürzt hat: Offen sind Format und Referenzimplementierung, nicht der JSON-Datentyp der Datenbank selbst. Womit auch die Frage im Raum steht, ob man überhaupt noch eine MongoDB braucht. Robert zeigt, dass die Oracle-Datenbank mit konfiguriertem ORDS im Mongo-Mode laufen kann und für die Clients ununterscheidbar von einer echten MongoDB wird.Abgefragt wird natürlich mit SQL. Für eindeutige Pfade ohne Arrays ist die Dot-Notation richtig bequem. Sobald es komplexer wird, kommt JSON_TABLE ins Spiel, ein Operator, der in der FROM-Clause lebt. Man gibt ihm das JSON-Dokument, definiert mit dem Row Producer, welche Elemente zu Zeilen werden, und legt die Spalten fest. Heraus kommen Zeilen und Spalten wie aus jeder anderen Tabelle, die sich joinen, filtern und sortieren lassen. Bei der Performance hilft das ganze Oracle-Arsenal. Text-Indizes, Function-Based-Indexes auf JSON_VALUE und JSON_QUERY und beim nativen Datentyp eigene JSON-Indizes mit eigenen Operatoren im Ausführungsplan.
Das Highlight zum Schluss sind die JSON Relational Duality Views aus Oracle 23. Sie mappen JSON-Dokumente bidirektional auf relationale Tabellen. Man wirft ein JSON-Dokument in die View, und sie verteilt es im Hintergrund automatisch auf normalisierte Tabellen. Umgekehrt liefert ein Select aus der View ein fertiges JSON-Dokument zurück. Für Robert ist das eine echte Kampfansage an die Object-Relational-Mapper. Java-Entwickler, die heute Hibernate brauchen, könnten künftig auf Duality Views setzen und sich den Mapper sparen.
Diese Folge in der Übersicht:
JSON steht für JavaScript Object Notation, entstand Ende der 90er und ist heute die Lingua Franca des Internets.
JSON ist reiner Text und passt in jede Textspalte. Bis 4000 Zeichen reicht VARCHAR2, im Extended Mode bis 32.000.
Für größere Dokumente rät Oracle zu BLOB statt CLOB, weil JSON immer UTF-8 ist und so NLS-Layer und CLOB-Overhead entfallen.
Mit einem IS-JSON-Check-Constraint weiß die Datenbank, dass der Text in der Spalte JSON ist.
Ab Oracle 21 gibt es den nativen JSON-Datentyp mit dem OSON-Speicherformat. Der Aufbau von OSON ist über die Python- und JavaScript-Thin-Driver quelloffen, nicht der Datentyp selbst.
Mit konfiguriertem ORDS läuft die Oracle-Datenbank im Mongo-Mode und kann eine MongoDB komplett ersetzen.
code text here
Abgefragt wird mit SQL: Dot-Notation für einfache Pfade, JSON_TABLE in der FROM-Clause für vollwertige Zeilen und Spalten zum Joinen, Filtern und Sortieren.
Indizierbar mit Text-Indizes, Function-Based-Indexes und nativen JSON-Indizes inklusive eigener Operatoren im Ausführungsplan.
JSON Relational Duality Views in Oracle 23 mappen JSON bidirektional auf relationale Tabellen, eine echte Kampfansage an Hibernate und die ORM-Welt.
Mongo-Mode und Duality Views sind jeweils eigene große Themen, die eine eigene Folge verdienen.
Weiterführende Links und Ressourcen:
ora2know Website
Oracle JSON Developer's Guide (26ai) (Dokumentation)
Oracle JSON-Relational Duality Developer's Guide (26ai) (Dokumentation)
Oracle REST Data Services (ORDS) (Oracle)
ORDS Mongo API (Database API for MongoDB) (Dokumentation)
OSON Specification 1.0 (osonspec.org) (Nachtrag: offizielle Spezifikation des Binärformats, nach der Aufnahme veröffentlicht)
OSON-Referenzimplementierung in Java (github.com/oracle/oson, UPL-Lizenz) (Nachtrag)
python-oracledb Thin Driver (enthält den OSON-Aufbau, Open Source)
Konkret: OSON-Implementierung im python-oracledb Thin Driver (oson.pyx) (Beleg, main-Branch)
node-oracledb Thin Driver für JavaScript (Open Source)
JSON-Spezifikation (RFC 8259)
MongoDB
PostgreSQL JSON-Funktionen
Die Podcast-Hosts und Director:
Johannes Ahrends: Oracle ACE, DBA, ora2know. Web: carajandb.com
Robert Marz: Oracle ACE, IT-Architect, ora2know. Web: robbie.databee.org
Oliver Pyka: Oracle ACE, Freiberufler, ora2know. Web: pyka.de
Über O wie Datenbank:
Der deutschsprachige Oracle-Datenbank-Podcast von ora2know. Johannes Ahrends, Robert Marz und Oliver Pyka bringen zusammen über 90 Jahre Oracle-Erfahrung mit und sprechen alle vier Wochen über das, was DBAs, Entwickler und IT-Entscheider wirklich bewegt: Migration, Architektur, neue Features, Betrieb und Strategie rund um die Oracle Datenbank. Praxisnah, meinungsstark und ohne Marketing-Sprech.
Über ora2know:
Wissen teilen, Netzwerk aufbauen. ora2know ist eine unabhängige Community für Oracle-Datenbank-Administratoren und -Entwickler im deutschsprachigen Raum. Unser Ziel ist der praxisnahe Austausch von Wissen und Erfahrungen rund um Oracle Database, Oracle APEX und Oracle AI. Ohne kommerzielle Interessen, getragen von Enthusiasmus und gegenseitiger Hilfe. Ob DBA, Entwickler oder Architekt: ora2know verbindet Oracle-Profis in Deutschland, Österreich und der Schweiz.
Über diese Podcast-Produktion:
Dieser Podcast ist eine TON.EINS Produktion.

