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
