Veröffentlichung von EdgeDB 2.0, einer relationalen Graphdatenbank

Die Veröffentlichung von EdgeDB 2.0, einer Datenbank, die ein relationales und graphbasiertes Datenmodell sowie die Abfragesprache EdgeQL implementiert, wurde vorgestellt. Diese sind optimiert für die Arbeit mit komplexen hierarchischen Daten. Der Code ist in Python und Rust (Parser und leistungskritische Teile) geschrieben und steht unter der Apache 2.0 Lizenz. Das Projekt entwickelt sich als Erweiterung von PostgreSQL. Client-Bibliotheken sind für die Sprachen Python, Go, Rust und TypeScript/Javascript verfügbar. Ein Kommandozeilenwerkzeug zur Verwaltung der Datenbank und zur interaktiven Ausführung von Abfragen (REPL) wird bereitgestellt.

Anstelle eines tabellenbasierten Datenmodells verwendet EdgeDB ein deklaratives System, das auf Objekttypen basiert. Anstelle von Fremdschlüsseln (foreign key) zur Definition von Beziehungen zwischen Typen wird eine Verknüpfung über Referenzen angewendet (ein Objekt kann als Attribut eines anderen Objekts verwendet werden).

type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }

Um die Verarbeitung von Abfragen zu beschleunigen, können Indizes verwendet werden. Es werden auch Funktionen wie strikte Typisierung von Eigenschaften, Einschränkungen von Eigenschaftswerten, berechnete Eigenschaften und gespeicherte Prozeduren unterstützt. Eine Besonderheit des objektbasierten Schemas von EdgeDB, das in gewisser Weise an ORM erinnert, ist die Möglichkeit, Schemata zu mischen, Eigenschaften aus verschiedenen Objekten zu verknüpfen und integrierte JSON-Unterstützung.

Es stehen integrierte Werkzeuge zur Migration des Speicherschemas zur Verfügung — nach einer Änderung des Schemas, das in einer separaten esdl-Datei festgelegt wird, genügt es, den Befehl "edgedb migration create" auszuführen, und die Datenbank analysiert die Unterschiede im Schema und generiert interaktiv ein Skript für den Übergang zu dem neuen Schema. Die Historie der Schemaänderungen wird automatisch verfolgt.

Für die Abfrageerstellung wird sowohl die GraphQL-Abfragesprache als auch die eigene EdgeDB-Sprache unterstützt, die eine Anpassung von SQL für hierarchische Daten darstellt. Anstelle von Listen werden die Ergebnisse der Abfragen strukturiert dargestellt, und anstelle von Unterabfragen und JOIN-Operationen besteht die Möglichkeit, eine EdgeQL-Abfrage als Ausdruck innerhalb einer anderen Abfrage anzugeben. Transaktionen und Schleifen werden unterstützt.

select Movie { title, actors: { name } } filter .title = «The Matrix» insert Movie { title := «The Matrix Resurrections», actors := ( select Person filter .name in { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );

In der neuen Version:

  • Ein integrierte Web-Schnittstelle zur Datenbankadministration wurde hinzugefügt, die es ermöglicht, Daten anzuzeigen und zu bearbeiten, EdgeQL-Abfragen auszuführen und das verwendete Speicherschema zu analysieren. Die Schnittstelle wird mit dem Befehl «edgedb ui» gestartet und ist nach der Ausführung über localhost zugänglich.
    Veröffentlichung von EdgeDB 2.0, einer relationalen Graphdatenbank
  • Der Ausdruck «GROUP» wurde implementiert, der es ermöglicht, Daten zu segmentieren und zu aggregieren sowie Daten nach beliebigen EdgeQL-Ausdrücken zu gruppieren, analog zur Gruppierung in der SELECT-Operation.
  • Möglichkeit der Zugriffsverwaltung auf Objektebene. Die Zugriffsregeln werden auf der Ebene des Speicherschemas definiert und erlauben die Einschränkung der Nutzung eines bestimmten Objektsatzes bei Auswahl-, Einfüge-, Lösch- und Aktualisierungsvorgängen. Beispielsweise kann eine Regel hinzugefügt werden, die es nur dem Autor erlaubt, eine Veröffentlichung zu aktualisieren.
  • Es wurde die Möglichkeit hinzugefügt, globale Variablen im Speicherschema zu verwenden. Eine neue globale Variable current_user wurde zur Benutzerbindung vorgeschlagen.
  • Unterstützung für Typen hinzugefügt, die Wertebereiche (range) definieren.
  • Offizielle Clientbibliothek für die Programmiersprache Rust vorbereitet.
  • Der binäre Protokollstandard von EdgeDB wurde stabilisiert, und es ermöglicht die gleichzeitige Verarbeitung mehrerer verschiedener Sitzungen über eine einzige Netzwerkverbindung, das Durchleiten über HTTP, die Verwendung globaler Variablen und lokaler Zustände.
  • Unterstützung für die Aktivierung über Sockets hinzugefügt, wodurch der Server-Handler nicht im Speicher gehalten werden muss und nur bei einem Verbindungsversuch gestartet wird (nützlich zur Ressourcenschonung auf Entwickler-Systemen).

Quelle: opennet.ru

60GB SSD 8Gb DDR4