Release of the relational-graph database EdgeDB 4.0

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 сервере 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
Osta usaldusväärne veebihosting DDoS-kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS-kaitsega, VPS VDS serverid | ProHoster