Udgivelsen af databasen EdgeDB 5.0 er tilgængelig, som implementerer den relationelt-grafiske datamodel og forespørgselsproget EdgeQL, optimeret til at arbejde med komplekse hierarkiske data. Projektet udvikles som et lag oven på PostgreSQL, hvis kode er skrevet i Python og Rust (parser og ydeevne-kritiske dele) og distribueres under Apache 2.0 licensen. Klientbiblioteker er forberedt for Python, Go, Rust, .NET, Elixir og TypeScript/Javascript. Der tilbydes et kommandolinjeværktøj til at administrere databasen og til interaktiv udførelse af forespørgsler (REPL).
I stedet for en tabelbaseret datamodel anvender EdgeDB et deklarativt system baseret på objekt typer. I stedet for fremmednøgler (foreign key) til at definere forbindelser mellem typer anvendes binding via referencer (et objekt kan bruges som en egenskab af et andet objekt).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Funktioner som streng typification af egenskaber, værd begrænsninger for egenskaber, beregnede egenskaber og gemte procedurer understøttes. Blandt de unikke træk ved EdgeDB's objektlagringsskema, der minder om ORM, er muligheden for at blande skemaer, binde egenskaber fra forskellige objekter og integreret støtte til JSON. Indekser kan anvendes for at fremskynde behandlingen af forespørgsler.
Indbyggede værktøjer til migrering af lagringsskemaet tilbydes — efter ændring af skemaet, der angives i en separat esdl-fil, er det tilstrækkeligt at udføre kommandoen "edgedb migration create", og databasen vil analysere forskellene i skemaet og interaktivt generere et script til overgangen til det nye skema. Historikken for ændringer i skemaet spores automatisk.
Til stilling af forespørgsler understøttes GraphQL-forespørgselsproget og det eget EdgeDB-sprog, som er en tilpasning af SQL til hierarkiske data. I stedet for lister præsenteres forespørgselsresultater i struktureret form, og i stedet for underforespørgsler og JOIN-operationer er det muligt at angive én EdgeQL-forespørgsel som et udtryk inden for en anden forespørgsel. Transaktioner og loops understøttes.
select Movie { title, actors: { name } } filter .title = «The Matrix» insert Movie { title := «The Matrix Resurrections», actors := ( select Person filter .name in { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }
I den nye version:
- Der er tilføjet støtte for branching, der gør det muligt at anvende begrebet grene ved arbejde med data og skemaer, som bruges i versionskontrolsystemer. I denne udgave er udtrykket "database" blevet erstattet med "gren" (branch), og kommandoerne "create database" og "drop database" er blevet erklæret forældede, hvorefter det anbefales at bruge de nye kommandoer "create empty branch" og "drop branch". Ud over tomme grene kan man ved hjælp af kommandoerne "create schema branch" og "create data branch" oprette grene fra eksisterende grene og databaser ved at kopiere deres opbevaringsskema og data.
Fra et praktisk synspunkt gør denne understøttelse af grene det muligt at synkronisere data med den kode, der anvendes til deres behandling, samtidig med at der bevares kompatibilitet med den gamle kode. For eksempel kan man efter opdatering af koden knytte en ny datagren til den, som tager højde for ændringerne i lagringsskemaet. Denne funktionalitet er praktisk til at forenkle udviklingen og testningen af nye versioner af software, hvor man blot skal skifte til den allerede testede gren, når den er klar.
- I udvidelsen pgvector, der anvendes til effektiv opbevaring og forespørgsel af vektorer, er der tilføjet en ny type indekser HNSW (Hierarchical Navigable Small Worlds), som, ligesom indekset IVFFlat, er tilgængeligt i tre varianter: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip og ext::pgvector::hnsw_cosine. Desuden er mulighederne for finjustering af indekserne udvidet i pgvector via objektet ext::pgvector::Config.
- Der er tilføjet yderligere autentificeringsmuligheder. I udvidelsen auth er der implementeret støtte for passwordless autentificeringsmetoder WebAuthn (Passkeys) og "magic links" (baseret på email). Der er også tilføjet support for at bruge platforme som Slack og Discord som OAuth-udbydere.
- Der er foretaget præstationsoptimeringer. I implementeringen af cachen med resultaterne fra forespørgslerne er der sikret tilstand ved genstart, og der er tilføjet automatisk genkompilering efter migration. Hastigheden ved arbejde med store lagringsskemaer er blevet forbedret.
- I EdgeQL-sproget er det tilladt ikke at angive nøgleordet «union» i grundlæggende forespørgsler, hvor der anvendes udtryk som insert, update eller delete.
- Der er tilføjet kommandoen vacuum() til rengøring, optimering og pakning af indholdet i databasen.
- Det er tilladt at konvertere data mellem typen bytes og typerne int16, int32, int64 og uuid ved hjælp af funktionerne to_bytes(), to_uuid() og to_int*().
- Det er blevet muligt at lukke alle forbindelser til databasen efter udførelse af operationen «drop database».
Kilde: opennet.ru
