Datenbanken: EdgeDB 1.0 soll SQL Konkurrenz machen
Die Open-Source-Datenbank basiert auf dem graphrelationalen Modell, um Impedance Mismatch entgegenzuwirken. Ihre Query Language EdgeQL soll SQL überlegen sein.
Das Team hinter EdgeDB hat nach mehreren Jahren Entwicklungszeit die Open-Source-Datenbank in Version 1.0 fertiggestellt. Sie zeichnet sich dadurch aus, dass sie ein graphähnliches Schema mit einem relationalen Kern verbindet und dadurch bekannte Schwierigkeiten verhindern soll, die sich durch moderne objektorientierte Programmiersprachen im Einsatz mit Datenbanken ergeben. Ihre Abfragesprache EdgeQL soll eine knappere und einfacher zu nutzende Alternative zu SQL (Structured Query Language) sein. Nach dem ersten Meilenstein 1.0 hat bereits die Planung für EdgeDB 2.0 begonnen.
Das graph-relationale Modell
EdgeDB basiert auf einer Erweiterung des relationalen Datenmodells, das unter der Bezeichnung graph-relationales Modell läuft. Dieses soll die Impedance Mismatch umgehen, die beim Speichern von Objekten aus einer objektorientierten Programmiersprache in einer relationalen Datenbank auftritt, ohne dabei die solide Basis und Performance des relationalen Modells einzubüßen.
Die Open-Source-Datenbank EdgeDB implementiert das komplette Datenbank-Frontend inklusive Protokoll, Query Language und Schemadefinition sowie Client-Bibliotheken und -Tools. Als von EdgeDB betriebenes Backend fungiert PostgreSQL, wovon Anwenderinnen und Anwender laut EdgeDB-Team nichts bemerken sollten.
Angriff auf SQL
Die in EdgeDB genutzte Query Language EdgeQL soll ebenso mächtig sein wie SQL und die Abfragesprache, deren Ursprünge in den 1970ern liegen, in bestimmten Bereichen wie Klarheit, Knappheit und intuitiver Bedienung übertreffen. Eine Besonderheit von EdgeQL ist, dass deren Entwickler ein Überbrücken der Differenzen zwischen dem relationalen Paradigma von SQL und der objektorientierten Weise moderner Programmiersprachen verfolgen. Diesem Gegensatz begegnet EdgeDB dadurch, dass es Daten auf objektrelationale Art modelliert.
Zu den Eigenschaften von EdgeQL zählt, dass aufgrund des graph-relationalen Modells Beziehungen zwischen Daten ein First Class Concept sind, wodurch Joins überflüssig werden, sowie dass alles ein Ausdruck ist und nur eine Klasse von Werten existiert.
Kurz und bündig
Anhand eines Beispiels zeigt das EdgeDB-Team, wie sich EdgeQL und SQL unterscheiden. Das Beispiel zeigt alle Filme an, in denen die Schauspielerin Zendaya eine Rolle innehatte, berechnet für jeden dieser Filme eine durchschnittliche Kritikerbewertung und bezieht zusätzlich eine Top-5-Liste der Schauspielerinnen und Schauspieler in den Filmen anhand ihrer Reihenfolge in den Credits.
In EdgeQL sind dafür die folgenden Zeilen nötig:
select
Movie {
title,
rating := math::mean(.ratings.score)
actors: {
name
} order by @credits_order
limit 5,
}
filter
"Zendaya" in .actors.name
Demgegenüber steht eine Standard-SQL-Formulierung:
SELECT
title,
Actors.name AS actor_name,
(SELECT avg(score)
FROM Movie_Reviews
WHERE movie_id = Movie.id) AS rating
FROM
Movie
CROSS JOIN LATERAL (
SELECT name
FROM
Movie_Actors
INNER JOIN Person
ON Movie_Actors.person_id = Person.id
WHERE Movie_Actors.movie_id = Movie.id
ORDER BY Movie_Actors.credits_order
FETCH FIRST 5 ROWS ONLY
) AS Actors
WHERE
'Zendaya' IN (
SELECT Person.name
FROM
Movie_Actors
INNER JOIN Person
ON Movie_Actors.person_id = Person.id
)
Pläne für Version 2.0
Nach dem geglückten Release des ersten Meilensteins EdgeDB 1.0 steht das Entwicklerteam bereits in den Startlöchern für das nächste Major Release: EdgeDB 2.0 soll in wenigen Monaten erscheinen. Zu den Neuerungen soll dann ein Cloud-Service mit umfangreichen Funktionen zählen.
Lesen Sie auch
Workshop: Datenbanken verwalten und benutzen mit SQL
Alle weiteren Informationen zu EdgeDB 1.0 lassen sich der Ankündigung entnehmen. Einen Überblick bieten die Website des Projekts sowie dessen GitHub-Repository.
(mai)