Lëshimi i grafikut relacional DBMS EdgeDB 2.0

Është paraqitur lëshimi i DBMS EdgeDB 2.0, i cili zbaton modelin e të dhënave të grafikut relacional dhe gjuhën e pyetjeve EdgeQL, e optimizuar për të punuar me të dhëna komplekse hierarkike. Kodi është shkruar në Python dhe Rust (parser dhe pjesë kritike për performancën) dhe shpërndahet nën licencën Apache 2.0. Projekti po zhvillohet si një shtesë për PostgreSQL. Bibliotekat e klientëve përgatiten për Python, Go, Rust dhe TypeScript/Javascript. Ofron mjete të linjës së komandës për menaxhimin e DBMS dhe ekzekutimin interaktiv të pyetjeve (REPL).

Në vend të një modeli të dhënash të bazuar në tabelë, EdgeDB përdor një sistem deklarativ të bazuar në llojet e objekteve. Në vend të çelësave të huaj, lidhja me referencë përdoret për të përcaktuar marrëdhënien midis llojeve (një objekt mund të përdoret si pronë e një objekti tjetër).

tip Person { emri i kërkuar i pronës -> str; } type Movie { titulli i kërkuar i pronës -> str; aktorë me shumë lidhje -> Personi; }

Indekset mund të përdoren për të përshpejtuar përpunimin e pyetjeve. Mbështeten gjithashtu veçori të tilla si shtypja e fortë e pronës, kufizimet e vlerës së pronës, vetitë e llogaritura dhe procedurat e ruajtura. Karakteristikat e skemës së ruajtjes së objekteve EdgeDB, e cila të kujton disi një ORM, përfshijnë aftësinë për të përzier skemat, lidhjen e vetive nga objekte të ndryshme dhe mbështetjen e integruar JSON.

Mjetet e integruara ofrohen për ruajtjen e migrimit të skemës - pas ndryshimit të skemës së specifikuar në një skedar të veçantë esdl, thjesht ekzekutoni komandën "edgedb migration create" dhe DBMS do të analizojë ndryshimet në skemë dhe do të gjenerojë në mënyrë interaktive një skript për migrimin në skema e re. Historia e ndryshimeve të skemës gjurmohet automatikisht.

Për të gjeneruar pyetje, mbështeten si gjuha e pyetjeve GraphQL, ashtu edhe gjuha e pronarit EdgeDB, e cila është një përshtatje e SQL për të dhënat hierarkike. Në vend të listave, rezultatet e pyetjeve formatohen në një mënyrë të strukturuar dhe në vend të nënpyetjeve dhe JOIN-ve, mund të specifikoni një pyetje EdgeQL si shprehje brenda një pyetjeje tjetër. Transaksionet dhe ciklet mbështeten.

zgjidhni Filmin {titulli, aktorët: { emri } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", aktorët := ( zgjidhni Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } për numrin në bashkimin {0, 1, 2, 3} ( zgjidhni {numri, numri + 0.5 } );

Në versionin e ri:

  • Një ndërfaqe e integruar në ueb është shtuar për administrimin e bazës së të dhënave, duke ju lejuar të shikoni dhe modifikoni të dhënat, të ekzekutoni pyetjet EdgeQL dhe të analizoni skemën e ruajtjes së përdorur. Ndërfaqja niset nga komanda "edgedb UI", pas së cilës ajo bëhet e disponueshme kur hyn në localhost.
    Lëshimi i grafikut relacional DBMS EdgeDB 2.0
  • Shprehja "GROUP" është implementuar, duke ju lejuar të ndani dhe të grumbulloni të dhëna dhe të gruponi duke përdorur shprehje arbitrare të EdgeQL, të ngjashme me grupimin në një operacion SELECT.
  • Aftësia për të kontrolluar aksesin në nivelin e objektit. Rregullat e aksesit përcaktohen në nivelin e skemës së ruajtjes dhe ju lejojnë të kufizoni aftësinë për të përdorur një grup të caktuar objektesh në operacionet e tërheqjes, futjes, fshirjes dhe përditësimit. Për shembull, mund të shtoni një rregull që lejon vetëm autorin të përditësojë një botim.
  • U shtua aftësia për të përdorur variabla globale në skemën e ruajtjes. Një variabël i ri global aktual_user është propozuar për t'u lidhur me përdoruesin.
  • Mbështetje e shtuar për llojet që përcaktojnë vargjet e vlerave.
  • Është përgatitur një bibliotekë zyrtare e klientëve për gjuhën Rust.
  • Protokolli binar EdgeDB është stabilizuar, duke bërë të mundur përpunimin e disa seancave të ndryshme njëkohësisht brenda të njëjtës lidhje rrjeti, përcjelljen përmes HTTP, duke përdorur variabla globale dhe gjendje lokale.
  • Mbështetje e shtuar për aktivizimin e prizës, e cila ju lejon të mos e mbani mbajtësin e serverit në memorie dhe ta ekzekutoni atë vetëm kur përpiqeni të krijoni një lidhje (e dobishme për kursimin e burimeve në sistemet e zhvilluesve).

Burimi: opennet.ru

Shto një koment