Utgivelse av relasjonsgrafen DBMS EdgeDB 2.0

Utgivelsen av EdgeDB 2.0 DBMS presenteres, som implementerer relasjonsgrafdatamodellen og EdgeQL-spørringsspråket, optimalisert for arbeid med komplekse hierarkiske data. Koden er skrevet i Python og Rust (parser og ytelseskritiske deler) og distribueres under Apache 2.0-lisensen. Prosjektet utvikles som et tillegg for PostgreSQL. Klientbiblioteker er forberedt for Python, Go, Rust og TypeScript/Javascript. Gir kommandolinjeverktøy for DBMS-administrasjon og interaktiv spørringskjøring (REPL).

I stedet for en tabellbasert datamodell, bruker EdgeDB et deklarativt system basert på objekttyper. I stedet for fremmednøkler, brukes kobling ved referanse for å definere forholdet mellom typer (ett objekt kan brukes som en egenskap for et annet objekt).

type Person { nødvendig egenskapsnavn -> str; } skriv inn Film { nødvendig egenskapstittel -> str; multi link aktører -> Person; }

Indekser kan brukes til å fremskynde behandling av spørringer. Funksjoner som sterk egenskapsskriving, eiendomsverdibegrensninger, beregnede egenskaper og lagrede prosedyrer støttes også. Funksjoner ved EdgeDB-objektlagringsskjemaet, som minner litt om en ORM, inkluderer muligheten til å blande skjemaer, koble egenskaper fra forskjellige objekter og integrert JSON-støtte.

Innebygde verktøy er tilgjengelig for lagring av skjemamigrering - etter å ha endret skjemaet spesifisert i en separat esdl-fil, kjør bare kommandoen "edgedb migration create" og DBMS vil analysere forskjellene i skjemaet og interaktivt generere et skript for migrering til nytt skjema. Historien til skjemaendringer spores automatisk.

For å generere spørringer støttes både GraphQL-spørringsspråket og det proprietære EdgeDB-språket, som er en tilpasning av SQL for hierarkiske data. I stedet for lister, formateres spørringsresultater på en strukturert måte, og i stedet for underspørringer og JOIN-er kan du spesifisere én EdgeQL-spørring som et uttrykk i en annen spørring. Transaksjoner og sykluser støttes.

velg Film { title, actors: { name } } filter .title = "The Matrix" sett inn Film { title := "The Matrix Resurrections", skuespillere := (velg Person filter .name i { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } for nummer i {0, 1, 2, 3} union (velg { nummer, tall + 0.5 } );

I den nye versjonen:

  • Et innebygd webgrensesnitt er lagt til for databaseadministrasjon, slik at du kan se og redigere data, kjøre EdgeQL-spørringer og analysere lagringsskjemaet som brukes. Grensesnittet startes av kommandoen "edgedb ui", hvoretter det blir tilgjengelig når du får tilgang til localhost.
    Utgivelse av relasjonsgrafen DBMS EdgeDB 2.0
  • "GROUP"-uttrykket er implementert, slik at du kan partisjonere og aggregere data og gruppere data ved å bruke vilkårlige EdgeQL-uttrykk, som ligner på gruppering i en SELECT-operasjon.
  • Evne til å kontrollere tilgang på objektnivå. Tilgangsregler er definert på lagringsskjemanivå og lar deg begrense muligheten til å bruke et bestemt sett med objekter i henting, innsetting, sletting og oppdatering. Du kan for eksempel legge til en regel som lar bare forfatteren oppdatere en publikasjon.
  • Lagt til muligheten til å bruke globale variabler i lagringsskjemaet. En ny global variabel current_user har blitt foreslått for å binde til brukeren.
  • Lagt til støtte for typer som definerer verdiområder.
  • Det er utarbeidet et offisielt klientbibliotek for Rust-språket.
  • Den binære EdgeDB-protokollen er stabilisert, noe som gjør det mulig å behandle flere forskjellige sesjoner samtidig innenfor samme nettverkstilkobling, videresending via HTTP, ved hjelp av globale variabler og lokale tilstander.
  • Lagt til støtte for socket-aktivering, som lar deg ikke beholde serverbehandleren i minnet og bare kjøre den når du prøver å etablere en tilkobling (nyttig for å spare ressurser på utviklersystemer).

Kilde: opennet.ru

Legg til en kommentar