Predstavljena je nova verzija SDB-a EdgeDB 2.0, koja implementira relacijsko-grafički model podataka i jezik upita EdgeQL, optimiziran za rad s složenim hijerarhijskim podacima. Kod je napisan na jezicima Python i Rust (parser i kritični dijelovi u pogledu performansi) i distribuira se pod Apache 2.0 licencom. Projekt se razvija kao nadgradnja na PostgreSQL. Klijentske biblioteke su pripremljene za jezike Python, Go, Rust i TypeScript/Javascript. Pruža se alatna linija za upravljanje SDB-om i interaktivno izvršavanje upita (REPL).
Namesto modela podatkov, temelječega na tabelah, EdgeDB uporablja deklarativni sistem, ki temelji na objektnih tipih. Namesto zunanjih ključev (foreign key) za določanje povezav med tipi se uporablja povezovanje z referencami (en objekt se lahko uporablja kot lastnost drugega objekta).
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Za pospešitev obdelave poizvedb se lahko uporabljajo indeksi. Podprte so tudi možnosti, kot so stroga tipizacija lastnosti, omejitve vrednosti lastnosti, izračunane lastnosti in shranjene procedure. Med značilnostmi objektnega skladiščenja EdgeDB, ki nekoliko spominja na ORM, izstopa možnost mešanja shem, povezovanja lastnosti iz različnih objektov in integrirana podpora za JSON.
Na voljo so vgrajena orodja za migracijo sheme shranjevanja — po spremembi sheme, določene v ločenem esdl-dokumentu, je dovolj, da izvedete ukaz "edgedb migration create", in SGBD bo analiziral razlike v schemi ter v interaktivnem načinu generiral skript za prehod na novo shemo. Zgodovina sprememb sheme se samodejno sledi.
Za oblikovanje poizvedb je podprt tako jezik poizvedb GraphQL kot tudi naš lastni jezik EdgeDB, ki predstavlja prilagoditev SQL za hierarhične podatke. Namesto seznamov so rezultati poizvedbe oblikovani v strukturirani obliki, namesto podpoizvedb in operacij JOIN pa je na voljo možnost navedbe ene poizvedbe EdgeQL kot izraza znotraj druge poizvedbe. Podprte so transakcije in cikli.
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’ } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );
V novi različici:
- Dodana je ugrađena web-sučelje za administraciju Baze podataka, koje omogućava pregled i izmjenu podataka, izvršavanje upita EdgeQL i analizu primijenjene sheme pohrane. Sučelje se aktivira naredbom «edgedb ui», nakon čega postaje dostupno putem localhosta.

- Implementirano je izraz «GROUP», koje omogućava sekcioniranje i agregaciju podataka te izvođenje grupiranja podataka prema proizvoljnim izrazima EdgeQL, analogno grupiranju u operaciji SELECT.
- Mogućnost upravljanja pristupom na razini objekata. Pravila pristupa definiraju se na razini sheme pohrane i omogućavaju ograničavanje korištenja određenog skupa objekata u operacijama izbor, umetanje, brisanje i ažuriranje. Na primjer, može se dodati pravilo koje dopušta ažuriranje objave samo autoru.
- Dodana je mogućnost korištenja globalnih varijabli u shemi pohrane. Za vezu s korisnikom predložena je nova globalna varijabla current_user.
- Dodana je podrška za tipove koji definiraju raspona vrijednosti (range).
- Pripremljena je službena klijentska biblioteka za jezik Rust.
- Stabiliziran je binarni protokol EdgeDB, koji omogućava upravljanje istovremeno više različitih sesija unutar jednog mrežnog povezivanja, prosljeđivanje preko HTTP-a, korištenje globalnih varijabli i lokalnih stanja.
- Dodana je podpora za aktivacijo prek vtičnice, ki omogoča, da strežniški obdelovalec ni ves čas v pomnilniku in se zažene le ob poskusu vzpostavitve povezave (koristno za varčevanje z viri na sistemih razvijalcev).
Izvor: opennet.ru

