EdgeDB 5.0 har slÀppts och implementerar en relations-grafdatamodell samt frÄgesprÄket EdgeQL, optimerat för arbete med komplexa hierarkiska data. Projektet utvecklas som en utbyggnad över PostgreSQL, dÀr koden Àr skriven i Python och Rust (parser och prestandakritiska delar), och distribueras under Apache 2.0-licensen. Klientbiblioteken har förberetts för sprÄken Python, Go, Rust, .NET, Elixir och TypeScript/Javascript. En kommandoradsverktyg tillhandahÄlls för att hantera databasen och för interaktiv exekvering av frÄgor (REPL).
IstÀllet för en tabellbaserad datamodell anvÀnder EdgeDB ett deklarativt system baserat pÄ objekttyper. IstÀllet för primÀrnycklar (foreign key) för att definiera relationen mellan typer, anvÀnds lÀnkbindningar (en objekt kan anvÀndas som en egenskap av ett annat objekt).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Funktioner som strikt typning av egenskaper, begrÀnsningar av egenskapsvÀrden, berÀknade egenskaper och lagrade procedurer stöds. Bland de sÀrskilda funktionerna i EdgeDB:s objektlagringsschema, som pÄminner om ORM, noteras möjligheten att blanda scheman, binda egenskaper frÄn olika objekt och integrerat stöd för JSON. För att pÄskynda frÄga bearbetningen kan index anvÀndas.
Inbyggda verktyg för schema-migrering tillhandahĂ„lls â efter att schemat har Ă€ndrats i en separat esdl-fil, rĂ€cker det med att köra kommandot "edgedb migration create", sĂ„ analyserar databasen skillnaderna i schemat och genererar interaktivt ett script för att migrera till det nya schemat. Historiken för schemaĂ€ndringar spĂ„ras automatiskt.
FrÄgesprÄket GraphQL och det egna sprÄket EdgeDB, som Àr en anpassning av SQL för hierarkiska data, stöds för att formulera frÄgor. IstÀllet för listor visas frÄgeresultaten i strukturerad form, och istÀllet för underfrÄgor och JOIN-operationer ges möjligheten att ange en EdgeQL-frÄga som ett uttryck inom en annan frÄga. Transaktioner och loopar stöds.
vĂ€lja Film { titel, skĂ„despelare: { namn } } filter .titel = «The Matrix» infoga Film { titel := «The Matrix Resurrections», skĂ„despelare := ( vĂ€lj Person filter .namn i { âKeanu Reevesâ, âCarrie-Anne Mossâ, âLaurence Fishburneâ } ) }
I den nya versionen:
- Stöd för branching har lagts till, vilket möjliggör anvÀndning av grenkonceptet i datahantering och scheman, tillÀmpat i versionshanteringssystem. I den nya versionen föreslÄs termen «branch» istÀllet för «databas», och kommandona «create database» och «drop database» har deklarerats som förÄldrade, varvid de nya kommandona «create empty branch» och «drop branch» rekommenderas. Förutom tomma grenar kan du med hjÀlp av kommandona «create schema branch» och «create data branch» skapa avknoppningar frÄn befintliga grenar och databaser, och kopiera lagringsscheman och data frÄn dem.
FrÄn ett praktiskt perspektiv möjliggör stödet för grenar att synkronisera data med den kod som anvÀnds för att bearbeta dem, samtidigt som kompatibiliteten med gammal kod bibehÄlls. Till exempel, efter att ha uppdaterat koden kan en ny datagren kopplas till den och ta hÀnsyn till de Àndringar som gjorts i lagringsschemat. Denna funktionalitet Àr praktisk för att förenkla utveckling och testning av nya programvaruversioner, dÀr det efter att de Àr redo rÀcker med att vÀxla till den redan testade grenen.
- I tillÀgget pgvector, som anvÀnds för effektiv lagring och förfrÄgning av vektorer, har en ny typ av index, HNSW (Hierarchical Navigable Small Worlds), lagts till. Denna Àr, likt indexet IVFFlat, tillgÀnglig i tre varianter: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip och ext::pgvector::hnsw_cosine. Dessutom har möjligheterna för finjustering av indexen utökats genom objektet ext::pgvector::Config.
- Ytterligare autentiseringsmöjligheter har lagts till. I tillÀgget auth har stöd för lösenordsfria autentiseringsscheman WebAuthn (Passkeys) och «magic links» (baserat pÄ e-post) implementerats. Stöd för att anvÀnda plattformarna Slack och Discord som OAuth-leverantörer har ocksÄ lagts till.
- Prestandaoptimeringar har genomförts. I implementeringen av cacheminnet med resultaten av kompilering av förfrÄgningar har tillstÄndet bevarats mellan omstarter, och automatisk rekompilering efter migration har lagts till. Hastigheten för stora lagringsscheman har förbÀttrats.
- I EdgeQL-frÄgesprÄket Àr det tillÄtet att utelÀmna nyckelordet "union" i grundlÀggande förfrÄgningar dÀr uttryck för insert, update eller delete anvÀnds.
- Kommandot vacuum() har lagts till för att rensa, optimera och packa databasens innehÄll.
- Det Àr tillÄtet att konvertera data mellan datatypen bytes och typerna int16, int32, int64 och uuid, med hjÀlp av funktionerna to_bytes(), to_uuid() och to_int*().
- Funktionen att stÀnga alla anslutningar till databasen efter att operationen "drop database" har genomförts har lagts till.
KĂ€lla: opennet.ru
