Veröffentlichung der relationalen Graph-Datenbank EdgeDB 5.0

Die Version 5.0 der Datenbank EdgeDB ist jetzt verfügbar. Sie implementiert ein relationales-graphisches Datenmodell und die Abfragesprache EdgeQL, die für den Umgang mit komplexen hierarchischen Daten optimiert ist. Das Projekt entwickelt sich als Erweiterung von PostgreSQL, dessen Code in Python und Rust (Parser und leistungsrelevante Komponenten) geschrieben ist und unter der Lizenz Apache 2.0 verteilt wird. Client-Bibliotheken sind für die Programmiersprachen Python, Go, Rust, .NET, Elixir sowie TypeScript/Javascript verfügbar. Ein Kommandozeilenwerkzeug wird bereitgestellt, um die Datenbank zu verwalten und Abfragen interaktiv auszuführen (REPL).

Anstelle eines tabellenbasierten Datenmodells basiert EdgeDB auf einem deklarativen System aus objektbasierten Typen. Anstelle von Fremdschlüsseln (foreign keys) zur Bestimmung der Beziehungen zwischen den Typen wird eine Verlinkung durch Referenzen verwendet (ein Objekt kann als Eigenschaft eines anderen Objekts genutzt werden).

type Person { required name: str; } type Movie { required title: str; multi actors: Person; }

Es werden Funktionen wie strenge Typisierung von Eigenschaften, Einschränkungen von Eigenschaftswerten, berechnete Eigenschaften und gespeicherte Prozeduren unterstützt. Besonders hervorzuheben ist die objektorientierte Speicherungsschema von EdgeDB, die an ORM erinnert. Sie ermöglicht eine Mischung von Schemata, das Binden von Eigenschaften aus verschiedenen Objekten und die integrierte Unterstützung von JSON. Zur Beschleunigung der Verarbeitung können Indizes verwendet werden.

Integrierte Werkzeuge zur Migration des Speichschemas werden bereitgestellt — nach einer Änderung des Schemas, das in einer separaten esdl-Datei definiert ist, genügt es, den Befehl „edgedb 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.

Für die Durchführung von Abfragen werden die Abfragesprache GraphQL und 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 kann eine EdgeQL-Abfrage als Ausdruck innerhalb einer anderen Abfrage angegeben werden. 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' } ) }

In der neuen Version:

  • Die Unterstützung für Branching wurde hinzugefügt, was es ermöglicht, das Konzept von Branches in Versionierungssystemen bei der Arbeit mit Daten und Schemata zu nutzen. Anstelle des Begriffs "Datenbank" wird in der neuen Version das Konzept "Branch" vorgeschlagen. Die Befehle "create database" und "drop database" sind veraltet, und stattdessen sollten die neuen Befehle "create empty branch" und "drop branch" verwendet werden. Neben leeren Branches können mit den Befehlen "create schema branch" und "create data branch" Abzweigungen von bestehenden Branches und Datenbanken erstellt werden, indem die Speicherstruktur und die Daten daraus kopiert werden.

    Aus praktischer Sicht ermöglicht die Unterstützung von Branches die Synchronisierung von Daten mit dem Code, der zu ihrer Verarbeitung verwendet wird, und gewährleistet dabei die Kompatibilität mit älterem Code. Nach einem Code-Update kann beispielsweise ein neuer Daten-Branch an den aktualisierten Code gebunden werden, der die in der Schemaänderung des Codes vorgenommenen Anpassungen berücksichtigt. Diese Funktionalität ist besonders nützlich, um die Entwicklung und das Testen neuer Softwareversionen zu vereinfachen. Nach der Fertigstellung reicht es aus, auf den bereits getesteten Branch umzuschalten.

  • Das pgvector-Extension, das für die effiziente Speicherung und Abfrage von Vektoren verwendet wird, hat einen neuen Indextyp HNSW (Hierarchical Navigable Small Worlds) hinzugefügt. Dieser steht, ähnlich dem IVFFlat-Index, in drei Varianten zur Verfügung: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip und ext::pgvector::hnsw_cosine. Darüber hinaus wurden die Anpassungsmöglichkeiten von Indizes über das Objekt ext::pgvector::Config erweitert.
  • Zusätzliche Authentifizierungsmöglichkeiten wurden hinzugefügt. Im Auth-Extension wurde die Unterstützung für passwortlose Authentifizierungsschemas über WebAuthn (Passkeys) und "magic links" (basierend auf E-Mail) implementiert. Zudem wurde die Unterstützung der Plattformen Slack und Discord als OAuth-Provider integriert.
  • Leistungsoptimierungen wurden implementiert. Der Cache für die Ergebnisse von Abfragekompilierungen speichert den Zustand zwischen Neustarts und umfasst eine automatische Rekompilierung nach der Migration. Die Geschwindigkeit im Umgang mit großen Speichermodellen wurde erhöht.
  • In der Abfragesprache EdgeQL ist es im Ausdruck „for“ erlaubt, das Schlüsselwort „union“ in grundlegenden Abfragen, die die Ausdrücke insert, update oder delete verwenden, nicht anzugeben.
  • Der Befehl vacuum() wurde hinzugefügt, um den Inhalt der Datenbank zu bereinigen, zu optimieren und zu komprimieren.
  • Die Umwandlung von Daten zwischen dem Typ bytes und den Typen int16, int32, int64 und uuid ist nun möglich, indem die Funktionen to_bytes(), to_uuid() und to_int*() verwendet werden.
  • Es wurde die Möglichkeit hinzugefügt, alle Verbindungen zur Datenbank nach der Ausführung der Operation „drop database“ zu schließen.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster