Izlaista relācijas-grafiskā DBMS EdgeDB 4.0

Tika publicēta EdgeDB 4.0 versija, kas realizē relāciju-grafo datu modeli un EdgeQL vaicājumu valodu, optimizētiem darbiem ar sarežģītiem hierarhiskajiem datiem. Kods ir uzrakstīts Python un Rust valodās (parsētājs un veiktspējai kritiskās daļas) un tiek izplatīts saskaņā ar Apache 2.0 licenci. Projekts attīstās kā paplašinājums virs PostgreSQL. Klienta bibliotēkas ir sagatavotas Python, Go, Rust, .NET, Elixir un TypeScript/JavaScript valodām. Tiek nodrošināti rīki komandrindai, lai pārvaldītu datubāzi un interaktīvi izpildītu vaicājumus (REPL).

Izmantojot EdgeDB, tiek izmantota deklaratīva sistēma, kas balstās uz objektu tipiem, nevis tabulu balstītu datu modeli. Lai noteiktu saites starp tipiem, tiek izmantota saistīšana ar atsaucēm (viens objekts var tikt izmantots kā cita objekta īpašība) nevis ārējie atslēgas.

type Person { required name: str; } type Movie { required title: str; multi actors: Person; }

Lai paātrinātu vaicājumu apstrādi, var tikt izmantoti indeksi. Tiek atbalstītas arī tādas funkcijas kā stingra īpašību tipizācija, īpašību vērtību ierobežojumi, aprēķinātās īpašības un uzglabātās procedūras. Starp EdgeDB objektu uzglabāšanas shēmas īpatnībām, kas nedaudz atgādina ORM, izceļas iespēja sajaukt shēmas, sasaistīt īpašības no dažādiem objektiem un integrētā JSON atbalsts.

Ir pieejami iebūvēti instrumenti uzglabāšanas shēmas migrēšanai — pēc shēmas izmaiņām, kas norādītas atsevišķā esdl failā, pietiek ar komandas "edgedb migration create" izpildi, un datubāzes pārvaldnieks analizēs atšķirības shēmā un interaktīvā režīmā ģenerēs skriptu pārejai uz jauno shēmu. Automātiski tiek izsekota shēmas izmaiņu vēsture.

Vaicājumu veidošanai tiek atbalstīta gan GraphQL vaicājumu valoda, gan paša EdgeDB valoda, kas ir SQL adaptācija hierarhiskajiem datiem. Rezultāti tiek noformēti strukturētā veidā, nevis saraksta, bet, lai aizvietotu apakšvaicājumus un JOIN operācijas, tiek piedāvāta iespēja norādīt vienu EdgeQL vaicājumu kā izteiksmi cita vaicājuma iekšienē. Tiek atbalstītas transakcijas un cikli.

izvēlies Filmu { nosaukums, aktieri: { vārds } } filtrēt .nosaukums = «Matrix» pievienot Filmu { nosaukums := «Matrix Resurrections», aktieri := ( izvēlies Personu filtrēt .vārds iekš { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }

Jaunajā versijā:

  • Tika pievienota pilno teksta meklēšanas atbalsts, kas īstenots caur paplašināmu fts moduli. Lai pārveidotu jebkuru objektu par meklējamu dokumentu, jāizmanto indekss fts::index, bet, lai meklētu konkrētu frāzi starp indeksētajiem dokumentiem, ir piedāvāta funkcija fts::search(). Rezultāti tiek atgriezti kā krotēžs, kas satur atrasto objektu un tā meklēšanas svaru. Piemēram: 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;
  • Pievienots jauns datu tips „multirange”, kas nosaka vienu vai vairākus vērtību diapazonus pārtraukto intervālu attēlošanai. Pārklājošo jomu normalizācija noteiktajos diapazonos tiek veikta automātiski. Ar tipu „multirange” var strādāt visi iepriekš pieejamie funkcijas un operatori diapazonu apstrādei. select multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Tika pievienota un pēc noklusējuma aktivizēta autentifikācijas atbalsts, lai ierobežotu piekļuvi GraphQL un EdgeQL virs HTTP.
  • Lai palaistu autentifikācijas pakalpojumu, kas darbojas atsevišķi no datubāzes instancēm, tika pievienots paplašinājums „auth”, kas atbalsta OAuth vai pieteikšanos, izmantojot e-pastu un paroli.
  • Tika pievienots paplašinājums pgcrypto, kas nodrošina funkcijas hmac, gen_salt un crypt, lai veiktu hashēšanu un šifrēšanu. select ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Tika pievienots paplašinājums pg_trgm ar funkcijām tekstu līdzību noteikšanai.
  • Veiktas optimizācijas, kas ļauj paaugstināt veiktspēju. Atmiņas patēriņš ir serveri samazinājies par 40%. Pieprasījumu EdgeQL parsera kods ir pārrakstīts Rust valodā.
  • EdgeQL valodā ir pievienota atbalsts parastākai nosacījumu izteiksmju sintaksei (if … then .. else …). Nodrošināta iespēja izmantot nosacījumu DML dažādu objektu izveidei, atjaunināšanai un dzēšanai, pamatojoties uz noteiktiem nosacījumiem. Tika pievienotas funkcijas to_bytes(), to_str(), enc::base64_encode un enc::base64_decode. Trigeros ir atļauta izteiksmes „when” izmantošana. 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’);
  • Tika ieviests jauns veids, kā nodot globālās vērtības pieprasījumos GraphQL — vietā, lai izmantotu atsevišķu lauku, ir nodrošināta iespēja nodot mainīgos, pamatojoties uz objektu __globals__.

    Avots: opennet.lv
Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster