Esimene stabiilne väljaanne andmebaasist EdgeDB on nüüd saadaval. See on PostgreSQL'i peal oleva teegi, mis rakendab relatsiooniliste ja graafiliste andmemudelite ning EdgeQL-päringute keele, mis on optimeeritud keerukate hierarhiliste andmete töötlemiseks. Kood on kirjutatud Pythonis ja Rustis ning see levitatakse Apache 2.0 litsentsi alusel. Kliendiraamatukogud on ette valmistatud keelte jaoks Python, Go, Rust ja TypeScript/Javascript. Pakutakse käsurea tööriistu andmebaasi haldamiseks ja interaktiivsete päringute täitmiseks (REPL).
EdgeDB kasutab tabelipõhise andmemudeli asemel deklareeritud objekti tüüpidel põhinevat süsteemi. Seoste määratlemiseks objektide vahel kasutatakse sidemeid viidatud linkide kaudu (üks objekt võib olla teise objekti omadus). type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Küsimuste töötlemise kiirendamiseks võivad kasutada indekseid. Toetatakse ka selliseid võimalusi nagu omaduste ranget tüübilist määratlemist, omaduste väärtuse piiranguid, arvutuslikke omadusi ja salvestatud protseduure. EdgeDB objektimudeli salvestamise skeemi eripära, mis meenutab ORM-i, on võimalik segada skeeme, siduda omadusi erinevatest objektidest ning integreeritud JSON-i toetus.
Sisseehitatud tööriistad andmebaasiskeemi migratsiooniks — pärast esdl-failis määratud skeemi muutmist piisab, kui käivitada käsk "edgedb migration create" ning andmebaas analüüsib skeemi erinevusi ja genereerib interaktiivselt skripti uuele skeemile ülemiseks. Skeemi muutuste ajalugu jälgitakse automaatselt.
Küsimuste vormimiseks toetatakse nii GraphQL-i päringu keelt kui ka oma EdgeDB keelt, mis on SQL-i kohandamine hierarhiliste andmete jaoks. Asetatult loendite tulemused vormistatakse struktureeritud kujul, ning alampäringute ja JOIN-tegevuste asemel on võimalus määrata ühe EdgeQL-i päringu väljendus teises päringus. Toetatakse tehinguid ja tsükleid. 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 } );
Allikas: opennet.ru
