Die erste stabile Version des relationalen graphbasierten Datenbanksystems EdgeDB

Die erste stabile Version des EdgeDB-Datenbanksystems ist verfügbar, das eine Erweiterung von PostgreSQL darstellt und das relationale graphbasierte Datenmodell sowie die für die Arbeit mit komplexen hierarchischen Daten optimierte Abfragesprache EdgeQL implementiert. Der Code ist in den Programmiersprachen Python und Rust geschrieben und wird unter der Apache 2.0-Lizenz veröffentlicht. Die Client-Bibliotheken sind für die Sprachen Python, Go, Rust und TypeScript/Javascript vorbereitet. Ein Kommandozeilenwerkzeug für die Verwaltung der Datenbank und die interaktive Ausführung von Abfragen (REPL) wird bereitgestellt.

Statt eines tabellenbasierten Datenmodells verwendet EdgeDB ein deklaratives System basierend auf Objekttypen. Anstelle von Fremdschlüsseln (foreign key), um Verbindungen zwischen Typen zu definieren, wird die Verknüpfung durch Links verwendet (ein Objekt kann als Eigenschaft 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 Anfragenbildung werden sowohl die Abfragesprache GraphQL als auch die eigene Sprache EdgeDB unterstützt, die eine Anpassung von SQL für hierarchische Daten darstellt. Anstelle von Listen werden die Abfrageergebnisse in strukturierter Form ausgegeben, und anstelle von Unterabfragen und JOIN-Operationen besteht die Möglichkeit, eine einzelne EdgeQL-Anfrage als Ausdruck innerhalb einer anderen Anfrage 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 } );

Quelle: opennet.ru

60GB SSD 8Gb DDR4