U lansimin e EdgeDB 2.0, një sistem menaxhimi të bazës së të dhënave që implementon një model të dhënash relacional-grafik dhe gjuhën e pyetjeve EdgeQL, të optimizuar për punë me të dhëna komplekse hierarkike. 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 zhvillohet si një shtesë mbi PostgreSQL. Bibliotekat klient janë përgatitur për gjuhët Python, Go, Rust dhe TypeScript/Javascript. Ofron një mjet komandë për administrimin e SGBD-së dhe ekzekutimin interaktiv të pyetjeve (REPL).
Në EdgeDB, në vend të modelit të të dhënave të bazuara në tabela, përdoret një sistem deklarativ i bazuar në tipa objektesh. Në vend të çelësave të jashtëm (foreign key) për të përkufizuar lidhjet mes tipave, është e mundur të lidhen përmes lidhjeve (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; }
Indekset mund të përdoren për të përshpejtuar përpunimin e kërkesave. Mbështeten gjithashtu mundësi të tilla si tipizimi i rigoroz i pronave, kufizimet e vlerave të pronave, pronat e llogaritur dhe procedurat e ruajtura. Një nga veçoritë e skemës objektike të ruajtjes EdgeDB, e cila ngjan disi me ORM, është mundësia e përzierjes së skemave, lidhjes së pronave nga objekte të ndryshme dhe mbështetje e integruar për JSON.
Ofrohen mjete tĂ« integruara pĂ«r migrimin e skemĂ«s sĂ« ruajtjes â pas ndryshimit tĂ« skemĂ«s, tĂ« pĂ«rcaktuar nĂ« njĂ« skedĂ« tĂ« veçantĂ« esdl, mjafton tĂ« ekzekutohet komanda "edgedb migration create" dhe DBMS do tĂ« analizohet ndryshimet nĂ« skemĂ« dhe do tĂ« gjenerojĂ« njĂ« skenar pĂ«r kalimin nĂ« skemĂ«n e re nĂ« mĂ«nyrĂ« interaktive. Historiku i ndryshimeve tĂ« skemĂ«s Ă«shtĂ« i monitoruar automatikisht.
Për formimin e pyetjeve, mbështetet si gjuha e pyetjeve GraphQL ashtu edhe gjuha e vet EdgeDB, e cila është një adaptim i SQL për të dhëna hierarkike. Në vend të listave, rezultatet e pyetjes paraqiten në një format të strukturuar, dhe në vend të nënpyetjeve dhe operacioneve JOIN, ofrohet mundësia për të caktuar një pyetje EdgeQL si një shprehje brenda një pyetje tjetër. Mbështeten transaksionet dhe ciklet.
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 } );
Në këtë version të ri:
- Shtuar një ndërfaqe të integruar web për administrimin e DB, e cila lejon shikimin dhe redaktimin e të dhënave, ekzekutimin e pyetjeve EdgeQL dhe analizimin e skemës së ruajtjes së përdorur. Ndërfaqja aktivizohet me komandën "edgedb ui", pas së cilës bëhet e aksesueshme duke iu drejtuar localhost.

- Implementuar shprehja "GROUP", e cila lejon seksionimin dhe agregimin e të dhënave dhe kryerjen e grupimeve të të dhënave sipas shprehjeve të rastit EdgeQL, ngjashëm me grupimin në operacionin SELECT.
- Mundësia për të menaxhuar qasjen në nivelin e objekteve. Rregullat e qasjes përcaktohen në nivelin e skemës së ruajtjes dhe lejojnë kufizimin e mundësisë për të përdorur një grup të caktuar objektesh në operacionet e zgjedhjes, inserimit, fshirjes dhe përditësimit. Për shembull, është e mundur të shtoni një rregull që lejon përditësimin 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ë ofruar një variabël global e re current_user.
- Shtuar mbështetje për tipa që përcaktojnë intervale vlerash (range).
- Përgatitur një bibliotekë zyrtare klienti për gjuhën Rust.
- Stabilizuar protokollin binar të EdgeDB, në të cilin tani është e mundur të përpunoni njëkohësisht disa seanca të ndryshme brenda një lidhjeje rrjeti, duke kaluar përmes HTTP, duke përdorur variabla global dhe gjendje lokale.
- Shtuar mbështetje për aktivizim përmes soketit, duke lejuar që procesori server të mos mbahen në memorie dhe të aktivizohet vetëm kur përpiqet të vendosë një lidhje (e dobishme për kursimin e burimeve në sistemet e zhvilluesve).
Burimi: opennet.ru

