Esitatud on DBMS EdgeDB 4.0, mis rakendab relatsioonilis-graafilist andmemudelit ja pÀringukeelt EdgeQL, optimeeritud keeruliste hierarhiliste andmete töötlemiseks. Kood on kirjutatud keeltes Python ja Rust (parser ja jÔudluskriitilised osad) ning see levitakse Apache 2.0 litsentsi alusel. Projekt areneb PostgreSQL-i pealisehitusena. Klientide raamatukogud on ette valmistatud keeltele Python, Go, Rust, .NET, Elixir ja TypeScript/Javascript. Pakutakse kÀsurea tööriistu DBMS-i haldamiseks ja interaktiivseks pÀringute sooritamiseks (REPL).
EdgeDB-s kasutatakse deklaratiivset sĂŒsteemi, mis pĂ”hineb objektitĂŒĂŒpidel, mitte tabelipĂ”hist andmemudelit. Suhete mÀÀramiseks tĂŒĂŒpide vahel kasutatakse viidete sidumist (ĂŒks objekt vĂ”ib olla teise objekti omadus) selle asemel, et kasutada vĂ€liseid vĂ”tmeid.
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
PĂ€ringute töötlemise kiirendamiseks vĂ”ivad rakenduda indeksid. Toetatakse ka selliseid vĂ”imalusi nagu omaduste range tĂŒpiseerimine, omaduste vÀÀrtuste piirangud, arvutatud omadused ja salvestatud protseduurid. EdgeDB objekti salvestamise skeemi eripĂ€rad, mis sarnanevad ORM-iga, hĂ”lmavad skeemide segamist, erinevatest objektidest omaduste sidumist ja integreeritud JSONi tuge.
Pakutakse sisseehitatud tööriistu salvestamise skeemi migreerimiseks â pĂ€rast skeemi muutmist, mis on mÀÀratud eraldi esdl-failis, piisab kĂ€su âedgedb migration createâ tĂ€itmisest ning DBMS analĂŒĂŒsib skeemi erinevusi ja genereerib interaktiivses reĆŸiimis skripti uue skeemi juurde ĂŒleminekuks. Skeemi muudatuste ajalugu jĂ€lgitakse automaatselt.
PĂ€ringute koostamiseks toetatakse nii GraphQL pĂ€ringukeelt kui ka oma EdgeDB keelt, mis on SQL-i kohandamine hierarhiliste andmete jaoks. Tulemused esitatakse struktureeritud kujul listide asemel ning alampĂ€ringute ja JOIN-operatsioonide asemel on vĂ”imalik esitada ĂŒhte EdgeQL pĂ€ringut teise pĂ€ringu sees vĂ€ljendina. Toetatakse tehinguid ja tsĂŒkleid.
valige Film { pealkiri, nĂ€itlejad: { nimi } } filtrige .pealkiri = «The Matrix» sisestage Film { pealkiri := «The Matrix Resurrections», nĂ€itlejad := ( valige Isik filtrige .nimi sees { âKeanu Reevesâ, âCarrie-Anne Mossâ, âLaurence Fishburneâ } ) }
Uues versioonis:
- Lisatud toetust tĂ€istekstiotsingule, mis on rakendatud ĂŒhendatava moodulina fts. Iga objekti otsitavaks dokumendiks muutmiseks tuleks kasutada indeksit fts::index, ja vĂ€ljastatud dokumentide hulgas kindla fraasi otsimiseks on pakutud funktsioon fts::search(). Tulemused naasevad tupikute kujul, mis sisaldavad leitud objekti ja selle otsingu kaalu. NĂ€iteks: tĂŒĂŒp Esemed { nĂ”utud saadaval: bool { vaikimisi := false; }; nĂ”utud nimi: str; nĂ”utud kirjeldus: str; indeks fts::index on ( fts::with_options( .nimi, keel := fts::Language.eng ) ); } koos res := ( valige fts::search(Esemed, âcandy cornâ, keel := âengâ) ) valige res.objekt {nimi, skoor := res.skoor} jĂ€rjestage res.skoori jĂ€rgi kahanevalt;
- Lisatud uus andmetĂŒĂŒp «multirange», mis mÀÀratleb ĂŒhe vĂ”i mitu vÀÀrtuste vahemikku katkestatud intervallide esitamiseks. Katkestatud alade normaliseerimine mÀÀratud vahemikes toimub automaatselt. AndmetĂŒĂŒpi «multirange» saavad kasutada kĂ”ik varasemalt kĂ€ttesaadavad funktsioonid ja operaatorid vahemike töötlemiseks. valige multirange([vahemik(8, 10)]) + vahemik(1, 5) â vahemik(3, 4);
- Lisatud ja vaikimisi lubatud autentimise tugi, et piirata juurdepÀÀsu GraphQL-ile ja EdgeQL-ile HTTP ĂŒle.
- Autentimisteenuse kÀivitamiseks, mis töötab eraldi DB eksemplarist, on lisatud moodul «auth», mis toetab OAuth vÔi sisselogimist e-posti ja parooli kaudu.
- Lisatud moodul pgcrypto, mis pakub funktsioone hmac, gen_salt ja crypt hashimise ja krĂŒpteerimise jaoks. valige ext::pgcrypto::digest(âsalvestage seeâ, âsha1â);
- Lisatud moodul pg_trgm koos stringide sarnasuse mÀÀramise funktsioonidega.
- Teostatud optimeerimisi, mis vĂ”imaldasid tĂ”sta jĂ”udlust. MĂ€lukasutus on serveris vĂ€henenud 40% vĂ”rra. EdgeQL pĂ€ringu parseri kood on ĂŒmber kirjutatud keeles Rust.
- EdgeQL keelt on lisatud tavalisema sĂŒntaksi toetamine tingimuslike vĂ€ljendite jaoks (if ⊠then .. else âŠ). On antud vĂ”imalus kasutada tingimuslikku DML-i erinevate objektide loomisel, vĂ€rskendamisel ja kustutamisel, lĂ€htudes mÀÀratud tingimustest. On 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');
- On lisatud uus viis globaalsete vÀÀrtuste edastamiseks GraphQL pĂ€ringutesse â eraldi vĂ€lja kasutamise asemel on antud vĂ”imalus edastada muutujaid objekti __globals__ alusel.
Allikas: opennet.ru
