Die Entwickler der Datenbank EdgeDB haben angekündigt, das Projekt in Gel umzubenennen. Gleichzeitig wurde ein bedeutendes neues Release — Gel 6.0 — veröffentlicht. Der Grund für die Namensänderung ist der Wunsch, irreführende Assoziationen zu vermeiden, die durch die Verwendung des Begriffs „Edge“ entstehen, da viele das Projekt als Datenbank für Edge-Computing oder als graphenorientierte Datenbank wahrnehmen. Die Umbenennung betraf nur die Marke. Die Struktur des Projekts, die Ziele und das Team bleiben unverändert. Die Hilfsprogramme und Bibliotheken in der neuen Version wurden umbenannt, um jedoch die Abwärtskompatibilität zu gewährleisten, bleibt die Möglichkeit bestehen, alte Namen über symbolische Links und Wrapper zu verwenden.
Das Projekt entwickelt sich in Form eines Add-ons für PostgreSQL, das ein relationales graphbasiertes Datenmodell und die Abfragesprache EdgeQL implementiert, die für die Arbeit mit komplexen hierarchischen Daten optimiert ist. Der Code ist in den Sprachen Python und Rust (Parser und leistungskritische Teile) geschrieben und wird unter der Apache 2.0-Lizenz verbreitet. Es sind Client-Bibliotheken für die Sprachen Python, Go, Rust, .NET, Elixir und TypeScript/Javascript verfügbar. Ein Befehlszeilentool wird bereitgestellt, um die Datenbankverwaltung zu steuern und Abfragen interaktiv auszuführen (REPL).
Anstelle eines tabellenbasierten Datenmodells verwendet Gel ein deklaratives System auf Basis von Objekttypen. Anstelle von Fremdschlüsseln (foreign keys) zur Definition von Beziehungen zwischen Typen wird die Verknüpfung über Referenzen verwendet (ein Objekt kann als Eigenschaft eines anderen Objekts dienen).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Funktionen wie strenge Typisierung von Eigenschaften, Einschränkungen der Werte von Eigenschaften, berechnete Eigenschaften und gespeicherte Prozeduren werden unterstützt. Zu den Besonderheiten des objektorientierten Speicherschemas Gel, das an ORM erinnert, gehört die Möglichkeit, Schemas zu kombinieren, Eigenschaften aus verschiedenen Objekten zu verknüpfen und integrierte JSON-Unterstützung. Zur Beschleunigung der Anfragenverarbeitung können Indizes verwendet werden.
Integrierte Werkzeuge für die Migration des Speicherschemas werden bereitgestellt — nach der Änderung des in einer separaten esdl-Datei festgelegten Schemas genügt es, den Befehl „gel migration create“ auszuführen, und das DBMS analysiert die Unterschiede im Schema und generiert interaktiv ein Skript für den Übergang zum neuen Schema. Die Historie der Schemaänderungen wird automatisch verfolgt.
Zur Erstellung von Anfragen wird die Abfragesprache GraphQL sowie die eigene Sprache EdgeQL unterstützt, die eine Anpassung von SQL für hierarchische Daten darstellt. Anstelle von Listen werden die Abfrageergebnisse 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' } ) }
Hauptänderungen in Gel 6.0:
- Es wurde die Möglichkeit hinzugefügt, traditionelle SQL-Abfragen beim Anschluss an DBMS über das Gel-Protokoll oder im Modus des PostgreSQL-Protokolls zu verwenden. Die Unterstützung von SQL soll die Migration bestehender Projekte auf Gel vereinfachen, die nun schrittweise von SQL auf Gel umgestellt werden können, während die alten SQL-Clients und SQL-ORM weiterhin verwendet werden. Projekte, die ursprünglich EdgeQL verwendet haben, können zusätzliche Funktionen nutzen, die in SQL verfügbar sind, aber bisher nicht in EdgeQL implementiert sind, wie z. B. Fensterfunktionen, rekursive Abfragen und explizite Sperren.
- Die Unterstützung für ein Update vor Ort wurde hinzugefügt, das keine Erstellung und erneute Hochladung eines Datenbank-Dumps beim Übergang zu einem neuen größeren Release erfordert. Beim Update von EdgeDB 5.x auf Gil 6.0 muss die alte Methode verwendet werden, aber beim Übergang von Gil 6.x auf 7.0 ist keine erneute Hochladung des Dumps erforderlich.
- Es wird eine Speicherung der Abfrageleistungsstatistiken bereitgestellt, die über die Objekte sys::QueryStats zugänglich sind.
- Die Unterstützung des PostgreSQL-Extensions PostGIS zum Speichern räumlicher Daten, die in geografischen Informationssystemen verwendet werden, wurde hinzugefügt.
- Die Bibliothek std::net wurde hinzugefügt, um Netzwerkabfragen (HTTP wird unterstützt) asynchron zu senden.
- Zusätzlich zu ext::auth wurde die Unterstützung für die Konfiguration von OpenID Connect-Anbietern hinzugefügt.
- In dem Zusatz ext::ai wurde die Liste der unterstützten großen Sprachmodelle von OpenAI, Anthropic und Mistral aktualisiert.
- Es wurde die Möglichkeit geschaffen, zusätzliche Handler für Befehle im gel-Dienstprogramm zu verbinden.
- In EdgeQL wurde die Semantik zur Auffindung von Wegen zwischen Knoten im Graphen vereinfacht.
- In gel.toml wurde die Einstellung „[[watch]]“ hinzugefügt, die das Ausführen von Skripten bei Änderungen an angegebenen Dateien ermöglicht.
- Die Unterstützung von Gel wurde in ORM Drizzle implementiert.
Quelle: opennet.ru
