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.

In Pocket speichern vorlesen Druckansicht 13 Kommentare lesen

(Bild: whiteMocca/Shutterstock.com)

Lesezeit: 3 Min.
Inhaltsverzeichnis

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.

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.

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.

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
  )

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.

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)