Utgivelsen av DBMS EdgeDB 5.0 er nå tilgjengelig og implementerer den relationell-grafiske datamodellen og forespørselsspråket EdgeQL, optimalisert for håndtering av komplekse hierarkiske data. Prosjektet utvikles som et tillegg til PostgreSQL, der koden er skrevet i Python og Rust (parser og ytelseskritiske deler), og distribueres under Apache 2.0-lisensen. Klientbiblioteker er forberedt for språkene Python, Go, Rust, .NET, Elixir, og TypeScript/Javascript. Det tilbys et kommandolinjeverktøy for å administrere DBMS og interaktivt utføre forespørselene (REPL).
I EdgeDB brukes et deklarativt system basert på objekttyper i stedet for en datamodell basert på tabeller. For å definere relasjoner mellom typer brukes binding ved linker (ett objekt kan brukes som en egenskap av et annet objekt) i stedet for fremmednøkler.
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Følgende funksjoner er støttet: streng typetegning av egenskaper, verdibegrensninger, beregnede egenskaper og lagrede prosedyrer. Av de karakteristiske trekkene ved den objekt-mappede lagringsskjemaet i EdgeDB, som minner om ORM, er muligheten til å blande skjemaer, binde egenskaper fra forskjellige objekter og integrert JSON-støtte. For å akselerere behandling av forespørselene kan indekser brukes.
Innebygde verktøy for migrasjon av lagringsskjemaer tilbys — etter endringer i skjemaet angitt i en separat esdl-fil, er det tilstrekkelig å utføre kommandoen «edgedb migration create», og DBMS analyserer forskjellene i skjemaet og genererer interaktivt et skript for å oppdatere til det nye skjemaet. Endringshistorikk for skjemaet spores automatiskt.
For forespørselforming støttes GraphQL og det egne EdgeDB-språket, som er en tilpasning av SQL for hierarkiske data. I stedet for lister presenteres forespørselresultatene i strukturert form, og i stedet for underforespørsel og JOIN-operasjoner tilbys det muligheten for å spesifisere én EdgeQL-forespørsel som et uttrykk innen en annen forespørsel. Transaksjoner og løkker støttes.
velg Film { tittel, skuespillere: { navn } } filter .tittel = «The Matrix» sett inn Film { tittel := «The Matrix Resurrections», skuespillere := ( velg Person filter .navn i { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }
I den nye versjonen:
- Støtte for grener («branching») er lagt til, noe som lar deg bruke konseptet grener i arbeidet med data og skjemaer, som brukes i versjonskontrollsystemer. I den nye utgaven er termen «databasen» erstattet med konseptet «gren» (branch), og kommandoene «create database» og «drop database» er erklært foreldet. I stedet anbefales det å bruke de nye kommandoene «create empty branch» og «drop branch». I tillegg til tomme grener kan man bruke kommandoene «create schema branch» og «create data branch» for å opprette avleggere fra eksisterende grener og databaser, ved å kopiere lagringsskjemaet og dataene fra dem.
Fra et praktisk perspektiv gjør støtten for grener det mulig å synkronisere data med koden som brukes til å behandle dem, samtidig som kompatibiliteten med gammel kode opprettholdes. For eksempel, etter oppdatering av koden kan en ny datagren knyttes til den, som tar hensyn til endringene i lagringsskjemaet som er gjort i koden. Den beskrevne funksjonaliteten er praktisk for å forenkle utvikling og testing av nye programvareversjoner, og etter at de er klare, er det tilstrekkelig å bytte til den allerede testede grenen.
- I utvidelsen pgvector, som brukes for effektiv lagring og forespørsel av vektorer, er det lagt til en ny type indekser HNSW (Hierarchical Navigable Small Worlds), som, på samme måte som indeksen IVFFlat, er tilgjengelig i tre varianter: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip og ext::pgvector::hnsw_cosine. I tillegg er evnene til pgvector for fininnstilling av indekser utvidet gjennom objektet ext::pgvector::Config.
- Ytterligere autentiseringsmuligheter er lagt til. I utvidelsen auth er det implementert støtte for passordløse autentiseringsordninger via WebAuthn (Passkeys) og «magic links» (basert på e-post). Støtte for å bruke plattformene Slack og Discord som OAuth-leverandører er lagt til.
- Ytelsesoptimaliseringer er gjort. I implementeringen av cachen med resultater fra spørringskompilering er tilstanden bevart mellom omstarter, og automatisk rekombinering etter migrering er lagt til. Hastigheten ved håndtering av store lagringsskjemaer er økt.
- I EdgeQL-språket er det tillatt å utelate nøkkelordet «union» i grunnleggende spørringer der uttrykkene insert, update eller delete brukes.
- Det er lagt til en kommando vacuum() for rengjøring, optimalisering og pakking av DB-innhold.
- Det er tillatt å konvertere data mellom typen bytes og typene int16, int32, int64 og uuid, ved å bruke funksjonene to_bytes(), to_uuid() og to_int*().
- Det er lagt til muligheten for å lukke alle tilkoblinger til DB etter at operasjonen «drop database» er utført.
Kilde: opennet.ru
