Den første stabile udgivelse af relationsgrafen DBMS EdgeDB

Den første stabile udgivelse af EdgeDB DBMS er tilgængelig, som er en tilføjelse til PostgreSQL med implementeringen af ​​den relationelle grafdatamodel og EdgeQL-forespørgselssproget, optimeret til at arbejde med komplekse hierarkiske data. Koden er skrevet i Python og Rust og distribueres under Apache 2.0-licensen. Klientbiblioteker er forberedt til Python, Go, Rust og TypeScript/Javascript. Leverer kommandolinjeværktøjer til DBMS-styring og interaktiv forespørgselskørsel (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; } skriv Film { påkrævet ejendomstitel -> str; multi link aktører -> 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 { title, actors: { name } } filter .title = "The Matrix" indsæt Film { title := "The Matrix Resurrections", skuespillere := ( vælg Person filter .name i { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } for nummer i {0, 1, 2, 3} forening (vælg { nummer, tal + 0.5 });

Kilde: opennet.ru

Tilføj en kommentar