KÀes on EdgeDB 4.0 andmebaasi versioon, mis rakendab relatsioonilist ja graafilist andmemudelit ning EdgeQL pÀringukeelt, mis on optimeeritud keeruliste hierarhiliste andmete haldamiseks. Kood on kirjutatud keeles Python ja Rust (parser ning jÔudlusele kriitilised osad) ning see jagatakse Apache 2.0 litsentsi alusel. Projekt areneb PostgreSQL'i pealisehitusena. Klienditeegid on ette valmistatud keeltele Python, Go, Rust, .NET, Elixir ja TypeScript/JavaScript. Pakutakse kÀsurea tööriistu andmebaasi haldamiseks ja interaktiivsete pÀringute (REPL) tÀitmiseks.
EdgeDB-s rakendatakse andmemudelit, mis pĂ”hineb deklaratiivsel objekttĂŒĂŒpidel, mitte tabelite andmemudelit. TĂŒĂŒpidevaheliste suhete mÀÀratlemiseks kasutatakse viidatud sidumisi (ĂŒks objekt vĂ”ib olla teise objekti omadus) asemel vĂ€liseid vĂ”tmeid (foreign key).
type Person { required name: str; } type Movie { required title: str; multi 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.
PĂ€ringute koostamiseks toetatakse nii GraphQL pĂ€ringute keelt kui ka oma EdgeDB kĂ”net, mis on SQL-i kohandamine hierarhiliste andmete jaoks. Tulemustena esitatakse pĂ€ringud struktureeritud viisil, mitte loenditena, ning alampĂ€ringute ja JOIN operatsioonide asemel on vĂ”imalus mÀÀrata ĂŒks EdgeQL pĂ€ring vĂ€ljendina teises pĂ€ringus. Toetatakse tehingute ja tsĂŒklite kasutamist.
valige Film { pealkiri, nÀitlejad: { nimi } } filtri .pealkiri = «The Matrix» lisage Film { pealkiri := «The Matrix Resurrections», nÀitlejad := ( valige Inimene filtri .nimi kuulub { 'Keanu Reeves', 'Carrie-Anne Moss', 'Laurence Fishburne' } ) }
Uues versioonis:
- Lisatud tĂ€isteksti otsingu tugi, mis on rakendatud fts plugina kaudu. Iga objekti muutmiseks otsimiseks kergesti ligipÀÀsetavaks dokumendiks tuleks kasutada indeksit fts::index ning teatud fraaside otsimiseks indekseeritud dokumentide seas on soovitatud funktsioon fts::search(). Tulemused tagastatakse tuple'ide kujul, mis sisaldavad leitud objekti ja selle otsingukaalu. NĂ€iteks: type Item { required available: bool { default := false; }; required name: str; required description: str; index fts::index on ( fts::with_options( .name, language := fts::Language.eng ) ); } with res := ( select fts::search(Item, âcandy cornâ, language := âengâ) ) select res.object {name, score := res.score} order by res.score desc;
- Uus andmetĂŒĂŒp âmultirangeâ on lisatud, mis mÀÀratleb ĂŒhe vĂ”i mitu vÀÀrtuste vahemikku katkestatud intervallide esitamiseks. Katkestatud piirkondade normaliseerimine antud vahemikes toimub automaatselt. AndmetĂŒĂŒp âmultirangeâ toetab kĂ”iki varem saadaval olnud funktsioone ja operaatorite töötlust vahemike jaoks. select multirange([range(8, 10)]) + range(1, 5) â range(3, 4);
- Lisatud ja vaikimisi aktiveeritud autentimise tugi GraphQL ja EdgeQL'i juurde pÀÀsemise piiramiseks HTTP kaudu.
- Autentimisteenuse kÀivitamiseks, mis töötab eraldi andmebaasi instantsist, on lisatud laiendus «auth», mis toetab OAuth-i vÔi sisenemist e-posti ja parooliga.
- Lisatud laiendus pgcrypto, mis pakub funktsioone hmac, gen_salt ja crypt, et pakkuda hajutamiseks ja krĂŒpteerimiseks. select ext::pgcrypto::digest(âencrypt thisâ, âsha1â);
- Lisatud laiendus pg_trgm koos funktsioonidega stringide sarnasuse mÀÀramiseks.
- Tehtud on optimeerimisi, mis on parandanud jĂ”udlust. MĂ€lu tarbimine on serveril vĂ€henenud 40% vĂ”rra. EdgeQL'i pĂ€ringuparseri kood on ĂŒmber kirjutatud Rusti keeles.
- EdgeQL keelde on lisatud toetust tuttavamale tingimuslausete sĂŒntaksile (if ⊠then .. else âŠ). Antud on vĂ”imalus kasutada tingimuslikke DML-e, et luua, uuendada ja kustutada erinevaid objekte vastavalt antud tingimustele. Lisatud funktsioonid to_bytes(), to_str(), enc::base64_encode ja enc::base64_decode. Triggerites on lubatud kasutada vĂ€ljendit «when». select if count(Object) > 0 then âgot dataâ else âno dataâ; select (select User filter .name = âAliceâ) ?? (insert User { name := âAliceâ }); select enc::base64_encode(bâhelloâ);
- Lisatud uus viis globaalsete vÀÀrtuste edastamiseks GraphQL-pĂ€ringutesse â eraldi vĂ€lja kasutamise asemel on vĂ”imalik edastada muutujaid objekti __globals__ pĂ”hjal.
Allikas: opennet.ru
