Frigivelse af relationsgrafen DBMS EdgeDB 2.0

Udgivelsen af ​​EdgeDB 2.0 DBMS præsenteres, som implementerer den relationelle grafdatamodel og EdgeQL-forespørgselssproget, optimeret til at arbejde med komplekse hierarkiske data. Koden er skrevet i Python og Rust (parser og ydeevnekritiske dele) og distribueres under Apache 2.0-licensen. Projektet udvikles som en tilføjelse til PostgreSQL. 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 });

I den nye version:

  • En indbygget webgrænseflade er blevet tilføjet til databaseadministration, så du kan se og redigere data, køre EdgeQL-forespørgsler og analysere det anvendte lagerskema. Grænsefladen startes af kommandoen "edgedb ui", hvorefter den bliver tilgængelig ved adgang til localhost.
    Frigivelse af relationsgrafen DBMS EdgeDB 2.0
  • "GROUP"-udtrykket er blevet implementeret, hvilket giver dig mulighed for at partitionere og aggregere data og gruppere data ved hjælp af vilkårlige EdgeQL-udtryk, svarende til gruppering i en SELECT-operation.
  • Mulighed for at kontrollere adgang på objektniveau. Adgangsregler er defineret på lagerskemaniveau og giver dig mulighed for at begrænse muligheden for at bruge et bestemt sæt objekter i hentnings-, indsæt-, sletnings- og opdateringsoperationer. Du kan f.eks. tilføje en regel, der tillader kun forfatteren at opdatere en publikation.
  • Tilføjet muligheden for at bruge globale variabler i lagerskemaet. En ny global variabel current_user er blevet foreslået til at binde til brugeren.
  • Tilføjet understøttelse af typer, der definerer værdiområder.
  • Der er udarbejdet et officielt klientbibliotek for sproget Rust.
  • EdgeDB binære protokol er blevet stabiliseret, hvilket gør det muligt at behandle flere forskellige sessioner samtidigt inden for den samme netværksforbindelse, videresendelse via HTTP, ved hjælp af globale variabler og lokale tilstande.
  • Tilføjet understøttelse af socket-aktivering, som giver dig mulighed for ikke at beholde serverhandleren i hukommelsen og kun køre den, når du forsøger at etablere en forbindelse (nyttigt til at spare ressourcer på udviklersystemer).

Kilde: opennet.ru

Tilføj en kommentar