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.
- "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