Veröffentlichung des relationalen Graphen DBMS EdgeDB 2.0

Es wird die Veröffentlichung des DBMS EdgeDB 2.0 vorgestellt, das das relationale Diagrammdatenmodell und die EdgeQL-Abfragesprache implementiert und für die Arbeit mit komplexen hierarchischen Daten optimiert ist. Der Code ist in Python und Rust geschrieben (Parser und leistungskritische Teile) und wird unter der Apache 2.0-Lizenz vertrieben. Das Projekt wird als Add-on für PostgreSQL entwickelt. 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 } );

In der neuen Version:

  • Für die Datenbankverwaltung wurde eine integrierte Weboberfläche hinzugefügt, mit der Sie Daten anzeigen und bearbeiten, EdgeQL-Abfragen ausführen und das verwendete Speicherschema analysieren können. Die Schnittstelle wird mit dem Befehl „edgedb ui“ gestartet und steht dann beim Zugriff auf localhost zur Verfügung.
    Veröffentlichung des relationalen Graphen DBMS EdgeDB 2.0
  • Der „GROUP“-Ausdruck wurde implementiert und ermöglicht Ihnen das Partitionieren und Aggregieren von Daten sowie das Gruppieren von Daten mithilfe beliebiger EdgeQL-Ausdrücke, ähnlich wie beim Gruppieren in einer SELECT-Operation.
  • Möglichkeit, den Zugriff auf Objektebene zu steuern. Zugriffsregeln werden auf der Ebene des Speicherschemas definiert und ermöglichen es Ihnen, die Möglichkeit zur Verwendung eines bestimmten Satzes von Objekten bei Abruf-, Einfüge-, Lösch- und Aktualisierungsvorgängen einzuschränken. Sie können beispielsweise eine Regel hinzufügen, die nur dem Autor erlaubt, eine Veröffentlichung zu aktualisieren.
  • Es wurde die Möglichkeit hinzugefügt, globale Variablen im Speicherschema zu verwenden. Zur Bindung an den Benutzer wurde eine neue globale Variable „current_user“ vorgeschlagen.
  • Unterstützung für Typen hinzugefügt, die Wertebereiche definieren.
  • Eine offizielle Client-Bibliothek für die Rust-Sprache wurde vorbereitet.
  • Das EdgeDB-Binärprotokoll wurde stabilisiert und ermöglicht die gleichzeitige Verarbeitung mehrerer verschiedener Sitzungen innerhalb derselben Netzwerkverbindung, Weiterleitung über HTTP, Verwendung globaler Variablen und lokaler Zustände.
  • Unterstützung für die Socket-Aktivierung hinzugefügt, die es Ihnen ermöglicht, den Server-Handler nicht im Speicher zu behalten und ihn nur auszuführen, wenn versucht wird, eine Verbindung herzustellen (nützlich, um Ressourcen auf Entwicklersystemen zu sparen).

Source: opennet.ru

Kommentar hinzufügen