Ir laists EdgeDB 2.0 datu bāzes pārvaldības sistēmas izlaidums, kas īsteno relāciju-grafu datu modeli un vaicājumu valodu EdgeQL, optimizētu darbam ar sarežģītiem hierarhiskiem datiem. Kods rakstīts Python un Rust (parseris un veiktspējai kritiskas daļas) valodā un izplatīts ar Apache 2.0 licenci. Projekts attīstās kā paplašinājums virs PostgreSQL. Klientu bibliotēkas sagatavotas Python, Go, Rust un TypeScript/Javascript valodām. Nodrošināts komandrindas rīku komplekts datu bāzes pārvaldībai un interaktīvam vaicājumu izpildēm (REPL).
Izmantojot EdgeDB, tiek izmantota deklaratīva sistēma, kas balstās uz objektu tipiem, nevis tabulu balstītu datu modeli. Lai noteiktu saites starp tipiem, tiek izmantota saistīšana ar atsaucēm (viens objekts var tikt izmantots kā cita objekta īpašība) nevis ārējie atslēgas.
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Lai paātrinātu vaicājumu apstrādi, var tikt izmantoti indeksi. Tiek atbalstītas arī tādas funkcijas kā stingra īpašību tipizācija, īpašību vērtību ierobežojumi, aprēķinātās īpašības un uzglabātās procedūras. Starp EdgeDB objektu uzglabāšanas shēmas īpatnībām, kas nedaudz atgādina ORM, izceļas iespēja sajaukt shēmas, sasaistīt īpašības no dažādiem objektiem un integrētā JSON atbalsts.
Ir pieejami iebūvēti instrumenti uzglabāšanas shēmas migrēšanai — pēc shēmas izmaiņām, kas norādītas atsevišķā esdl failā, pietiek ar komandas "edgedb migration create" izpildi, un datubāzes pārvaldnieks analizēs atšķirības shēmā un interaktīvā režīmā ģenerēs skriptu pārejai uz jauno shēmu. Automātiski tiek izsekota shēmas izmaiņu vēsture.
Vaicājumu veidošanai tiek atbalstīta gan GraphQL vaicājumu valoda, gan paša EdgeDB valoda, kas ir SQL adaptācija hierarhiskajiem datiem. Rezultāti tiek noformēti strukturētā veidā, nevis saraksta, bet, lai aizvietotu apakšvaicājumus un JOIN operācijas, tiek piedāvāta iespēja norādīt vienu EdgeQL vaicājumu kā izteiksmi cita vaicājuma iekšienē. Tiek atbalstītas transakcijas un 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 } );
Jaunajā versijā:
- Iekļauts iebūvēts tīmekļa interfeiss datu bāzes administrēšanai, kas ļauj apskatīt un rediģēt datus, izpildīt EdgeQL vaicājumus un analizēt pielietoto glabāšanas shēmu. Interfeiss tiek palaists ar komandu „edgedb ui”, pēc kuras izpildes tas kļūst pieejams piekļūstot localhost.

- Īstenots „GROUP” izteikums, kas ļauj sekcionēt un agregēt datus un veikt datu grupēšanu pēc jebkādiem EdgeQL izteikumiem, līdzīgi kā grupēšana SELECT operācijā.
- Iespēja pārvaldīt piekļuvi objektu līmenī. Piekļuves noteikumi tiek noteikti glabāšanas shēmas līmenī un ļauj ierobežot noteikta objekta kopuma izmantošanu atlases, ievades, dzēšanas un atjaunināšanas operācijās. Piemēram, var pievienot noteikumu, kas atļauj atjaunot publikāciju tikai tās autoram.
- Pievienota globālo mainīgo izmantošana glabāšanas shēmā. Lietotāja sasaistīšanai piedāvāta jauna globālā mainīgā current_user.
- Pievienota atbalsts vērtību diapazonus definējošiem tipiem (range).
- Sagatavota oficiālā klienta bibliotēka Rust valodai.
- Stabilizēta EdgeDB binārā protokola versija, kurā parādījusies iespēja apstrādāt vienlaikus vairākus dažādus sesijas vienā tīkla savienojumā, pārraides caur HTTP, globālo mainīgo izmantošanu un vietējo stāvokļu izmantošanu.
- Pievienota atbalsta aktivizēšanai caur ligzdu, kas ļauj neuzturēt servera apstrādātāju atmiņā un palaist to tikai tad, kad tiek mēģināts izveidot savienojumu (noderīgi, lai ietaupītu resursus izstrādātāju sistēmās).
Avots: opennet.lv

