Die erste stabile Version des relationalen Graphen-DBMS EdgeDB

Es ist die erste stabile Version des EdgeDB DBMS verfügbar, einem Add-on zu PostgreSQL mit der Implementierung des relationalen Diagrammdatenmodells und der EdgeQL-Abfragesprache, optimiert für die Arbeit mit komplexen hierarchischen Daten. Der Code ist in Python und Rust geschrieben und wird unter der Apache 2.0-Lizenz vertrieben. Client-Bibliotheken sind für Python, Go, Rust und TypeScript/Javascript vorbereitet. Bietet Befehlszeilentools für die DBMS-Verwaltung und die interaktive Abfrageausführung (REPL).

Anstelle eines tabellenbasierten Datenmodells verwendet EdgeDB ein deklaratives System basierend auf Objekttypen. Anstelle von Fremdschlüsseln wird die Verknüpfung durch Referenz verwendet, um die Beziehung zwischen Typen zu definieren (ein Objekt kann als Eigenschaft eines anderen Objekts verwendet werden). type Person { erforderlicher Eigenschaftsname -> str; } type Movie { erforderlicher Eigenschaftstitel -> str; Multi-Link-Akteure -> Person; }

Mithilfe von Indizes kann die Abfrageverarbeitung beschleunigt werden. Funktionen wie starke Eigenschaftstypisierung, Eigenschaftswertbeschränkungen, berechnete Eigenschaften und gespeicherte Prozeduren werden ebenfalls unterstützt. Zu den Funktionen des EdgeDB-Objektspeicherschemas, das ein wenig an ein ORM erinnert, gehören die Möglichkeit, Schemata zu mischen, Eigenschaften verschiedener Objekte zu verknüpfen und integrierte JSON-Unterstützung.

Zum Speichern der Schemamigration stehen integrierte Tools zur Verfügung. Nachdem Sie das in einer separaten EDL-Datei angegebene Schema geändert haben, führen Sie einfach den Befehl „edgedb migration create“ aus. Das DBMS analysiert dann die Unterschiede im Schema und generiert interaktiv ein Skript für die Migration in die neues Schema. Der Verlauf der Schemaänderungen wird automatisch verfolgt.

Zur Generierung von Abfragen wird sowohl die Abfragesprache GraphQL als auch die proprietäre Sprache EdgeDB, eine Adaption von SQL für hierarchische Daten, unterstützt. Anstelle von Listen werden Abfrageergebnisse strukturiert formatiert, und anstelle von Unterabfragen und JOINs können Sie eine EdgeQL-Abfrage als Ausdruck innerhalb einer anderen Abfrage angeben. Transaktionen und Zyklen werden unterstützt. Select Movie { Titel, Schauspieler: { Name } } Filter .title = „The Matrix“ insert Movie { Title := „The Matrix Resurrections“, Actors := ( Select Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } für Zahl in der Vereinigung {0, 1, 2, 3} ( select { number, number + 0.5 } );

Source: opennet.ru

Kommentar hinzufügen