Lëshimi i EdgeDB 2.0, një SGBD që implementon modelin relacional-grafik të të dhënave dhe gjuhën e pyetjeve EdgeQL, e optimizuar për punë me të dhëna komplekse hierarkike, është bërë publik. Kodi është shkruar në gjuhët Python dhe Rust (parseri dhe pjesët kritike për performancën) dhe shpërndahet nën licencën Apache 2.0. Projekti po zhvillohet si një shtesë mbi PostgreSQL. Bibliotekat e klientëve janë përgatitur për gjuhët Python, Go, Rust dhe TypeScript/Javascript. Ofron një mjet komandash për menaxhimin e SGBD dhe ekzekutimin interaktiv të pyetjeve (REPL).
Në vend të modelit të të dhënave të bazuar në tabela, EdgeDB përdor një sistem deklarativ të bazuar në tipe objektesh. Në vend të çelësave të jashtëm (foreign key) për të përcaktuar lidhjet mes tipeve, përdoret lidhja me referenca (një objekt mund të përdoret si një pronë e një objekti tjetër).
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Për të përshpejtuar përpunimin e pyetjeve, mund të përdoren indekse. Nga këto mundësi, mbështeten gjithashtu tipizimi strikt i pronave, kufizimet e vlerave të pronave, pronat e llogaritura dhe procedurat e ruajtura. Një tipar i veçantë i skemës objektuale të ruajtjes në EdgeDB, e cila përshtatet me ORM-në, është mundësia për të përzier skema, lidhjen e pronave nga objekte të ndryshme dhe mbështetje e integruar për JSON.
Ofron mjete të integruara për migrimin e skemës së ruajtjes - pas ndryshimit të skemës, të përcaktuar në një skedar të veçantë esdl, mjafton të ekzekutoni komandën "edgedb migration create" dhe SGBD analizojnë diferencialet në skemë dhe në mënyrë interaktive gjeneron një skript për kalimin në skemën e re. Historia e ndryshimit të skemës ndiqet automatikisht.
Për formimin e pyetjeve, mbështetet si gjuhë pyetjesh GraphQL, ashtu edhe gjuha e saj EdgeDB, e cila është një përshtatje e SQL për të dhënat hierarkike. Në vend të LISTAVE, rezultatet e pyetjeve paraqiten në format të strukturuar, ndërsa në vend të nënpyetjeve dhe operacioneve JOIN ofrohet mundësia e specifikimit të një kërkese EdgeQL si një shprehje brenda një kërkese tjetër. Mbështeten transaksionet dhe ciklet.
zgjedh Filmin { titulli, aktorĂ«t: { emri } } filtro .titulli = «The Matrix» fut Filmin { titulli := «The Matrix Resurrections», aktorĂ«t := ( zgjedh Person filtro .emri nĂ« { âKeanu Reevesâ, âCarrie-Anne Mossâ, âLaurence Fishburneâ } ) } pĂ«r numra nĂ« {0, 1, 2, 3} bashko ( zgjedh { numri, numri + 0.5 } );
NĂ« versionin e ri:
- Shtuar një ndërfaqe web të integruar për administrimin e DB, e cila lejon shikimin dhe redaktimin e të dhënave, ekzekutimin e kërkesave EdgeQL dhe analizimin e skemës së ruajtjes. Ndërfaqja aktivizohet me komandën «edgedb ui», pas ekzekutimit të së cilës bëhet e aksesueshme duke u drejtuar te localhost.

- Realizuar shprehja «GROUP», e cila lejon sektorimin dhe agregimin e të dhënave dhe ekzekutimin e grupimit të të dhënave sipas shprehjeve të rastësishme EdgeQL, ngjashëm me grupimin në operacionin SELECT.
- Mundësia për të menaxhuar qasjen në nivel objektesh. Rregullat e qasjes përcaktohen në nivelin e skemës së ruajtjes dhe lejojnë kufizimin e mundësive të përdorimit të një grupi të caktuar objektesh në operacionet e zgjedhjes, futjes, fshirjes dhe azhornimit. Për shembull, mund të shtohet një rregull që lejon azhornimin e publikimit vetëm nga autori.
- Shtuar mundësia e përdorimit të variablave globalë në skemën e ruajtjes. Për lidhjen me përdoruesin është propozuar një variabël e re globale current_user.
- Shtuar mbështetje për tipet që përcaktojnë intervale vlerash (range).
- Përgatitur një bibliotekë klienti zyrtare për gjuhën Rust.
- Stabilizuar protokolli binar EdgeDB, në të cilin është bërë e mundur përpunimi i disa seancave të ndryshme në një lidhje të vetme rrjeti, kalimi përmes HTTP, përdorimi i variablave globalë dhe gjendjeve lokale.
- Shtuar mbështetje për aktivizimin përmes soketëve, e cila lejon që përpunuesi server të mos mbahet në kujtesë dhe të aktivizohet vetëm kur ka një përpjekje për të vendosur lidhjen (e dobishme për kursimin e burimeve te sistemet e zhvilluesve).
Burimi: opennet.ru

