EdgeDB 2.0 DBMS-udgivelsen præsenteres. Den implementerer relationsgrafdatamodellen og EdgeQL-forespørgselssproget, der er optimeret til at arbejde med komplekse hierarkiske data. Koden er skrevet i Python og Rust (parser- og performancekritiske dele) og distribueres under Apache 2.0-licensen. Projektet udvikles som et tilføjelsesprogram til PostgreSQL. Klientbiblioteker er forberedt til Python, Go, Rust og TypeScript/Javascript. Kommandolinjeværktøjer leveres til DBMS-styring og interaktiv forespørgselsudførelse (REPL).
I stedet for en tabelbaseret datamodel bruger EdgeDB et deklarativt system baseret på objekttyper. I stedet for fremmednøgler bruges linking ved reference til at definere forholdet mellem typer (et objekt kan bruges som en egenskab for et andet objekt).
type Person { påkrævet egenskabsnavn -> str; } type Film { påkrævet egenskabstitel -> str; multi link skuespillere -> Person; }
Indekser kan bruges til at fremskynde forespørgselsbehandlingen. Funktioner såsom stærk egenskabsskrivning, ejendomsværdibegrænsninger, beregnede egenskaber og lagrede procedurer understøttes også. Funktioner i EdgeDB-objektlagringsskemaet, som minder lidt om en ORM, omfatter muligheden for at blande skemaer, linke egenskaber fra forskellige objekter og integreret JSON-understøttelse.
Der er indbyggede værktøjer til lagring af skemamigrering - efter at have ændret skemaet angivet i en separat esdl-fil, skal du bare køre kommandoen "edgedb migration create", og DBMS vil analysere forskellene i skemaet og interaktivt generere et script til migrering til nyt skema. Historien om skemaændringer spores automatisk.
For at generere forespørgsler understøttes både GraphQL-forespørgselssproget og det proprietære EdgeDB-sprog, som er en tilpasning af SQL til hierarkiske data. I stedet for lister formateres forespørgselsresultater på en struktureret måde, og i stedet for underforespørgsler og JOINs kan du angive én EdgeQL-forespørgsel som et udtryk i en anden forespørgsel. Transaktioner og cyklusser understøttes.
vælg Film { titel, skuespillere: { navn } } filter .title = "The Matrix" indsæt Film { titel := "The Matrix Resurrections", skuespillere := ( vælg Person filter .name in { 'Keanu Reeves', 'Carrie-Anne Moss', 'Laurence Fishburne' } ) } for tal i {0, 1, 2, 3} union ( vælg { tal, tal + 0.5 } );
I den nye version:
- En indbygget webgrænseflade til databaseadministration er blevet tilføjet, så du kan se og redigere data, udføre EdgeQL-forespørgsler og analysere den anvendte lagringsmetode. Grænsefladen startes af kommandoen "edgedb ui", hvorefter den bliver tilgængelig, når du tilgår localhost.

- Udtrykket "GROUP" er blevet implementeret, hvilket giver dig mulighed for at partitionere og aggregere data og udføre gruppering af data efter vilkårlige EdgeQL-udtryk, svarende til gruppering i SELECT-operationen.
- Mulighed for at kontrollere adgang på objektniveau. Adgangsregler defineres på lagringsskemaniveau og giver dig mulighed for at begrænse brugen af et bestemt sæt objekter i vælg-, indsæt-, slet- og opdateringshandlinger. Du kan f.eks. tilføje en regel, der kun tillader forfatteren at opdatere en publikation.
- Tilføjet muligheden for at bruge globale variabler i lagringsskemaet. En ny global variabel current_user foreslås til binding til en bruger.
- Tilføjet understøttelse af typer, der definerer værdiintervaller.
- Det officielle klientbibliotek til Rust-sproget er blevet forberedt.
- Den binære EdgeDB-protokol er blevet stabiliseret, hvilket giver mulighed for at håndtere flere forskellige sessioner samtidigt inden for en enkelt netværksforbindelse, videresende via HTTP og bruge globale variabler og lokale tilstande.
- Tilføjet understøttelse af socket-aktivering, hvilket gør det muligt ikke at gemme serverhandleren i hukommelsen og kun at starte den, når der forsøges at oprette en forbindelse (nyttigt til at spare ressourcer på udviklersystemer).
Kilde: opennet.ru

