Izdaja relacijsko-grafične SDB EdgeDB 4.0

Predstavljen je izid SDB EdgeDB 4.0, ki implementira relacijsko-grafični model podatkov in jezik poizvedb EdgeQL, optimiziran za delo s kompleksnimi hierarhičnimi podatki. Koda je napisana v programskih jezikih Python in Rust (parser in kritične komponente uspešnosti) in se distribuira pod licenco Apache 2.0. Projekt se razvija kot nadgradnja PostgreSQL. Klientske knjižnice so pripravljene za jezike Python, Go, Rust, .NET, Elixir in TypeScript/Javascript. Na voljo je orodje ukazne vrstice za upravljanje SDB in interaktivno izvajanje poizvedb (REPL).

Namesto modela podatkov, temelječega na tabelah, EdgeDB uporablja deklarativni sistem, ki temelji na objektnih tipih. Namesto zunanjih ključev (foreign key) za določanje povezav med tipi se uporablja povezovanje z referencami (en objekt se lahko uporablja kot lastnost drugega objekta).

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

Za pospešitev obdelave poizvedb se lahko uporabljajo indeksi. Podprte so tudi možnosti, kot so stroga tipizacija lastnosti, omejitve vrednosti lastnosti, izračunane lastnosti in shranjene procedure. Med značilnostmi objektnega skladiščenja EdgeDB, ki nekoliko spominja na ORM, izstopa možnost mešanja shem, povezovanja lastnosti iz različnih objektov in integrirana podpora za JSON.

Na voljo so vgrajena orodja za migracijo sheme shranjevanja — po spremembi sheme, določene v ločenem esdl-dokumentu, je dovolj, da izvedete ukaz "edgedb migration create", in SGBD bo analiziral razlike v schemi ter v interaktivnem načinu generiral skript za prehod na novo shemo. Zgodovina sprememb sheme se samodejno sledi.

Za oblikovanje poizvedb je podprt tako jezik poizvedb GraphQL kot tudi naš lastni jezik EdgeDB, ki predstavlja prilagoditev SQL za hierarhične podatke. Namesto seznamov so rezultati poizvedbe oblikovani v strukturirani obliki, namesto podpoizvedb in operacij JOIN pa je na voljo možnost navedbe ene poizvedbe EdgeQL kot izraza znotraj druge poizvedbe. Podprte so transakcije in cikli.

izberi Film { naslov, igralci: { ime } } filtriraj .naslov = «The Matrix» vstavi Film { naslov := «The Matrix Resurrections», igralci := ( izberi Oseba filtriraj .ime v { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }

V novi različici:

  • Dodana je podpora za polno besedno iskanje, implementirana preko vtičnika fts. Za pretvorbo katerega koli objekta v dokument, dostopen za iskanje, je treba uporabiti indeks fts::index, za iskanje določene fraze med indeksiranimi dokumenti pa je na voljo funkcija fts::search(). Rezultati se vrnejo v obliki tuplov, ki vsebujejo najdeni objekt in njegovo iskalno težo. Na primer: 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;
  • Dodana je nova vrsta podataka „multirange“, koja definiše jedan ili više opsega vrednosti za predstavljanje prekida intervala. Normalizacija preklapanja u zadanom opsegu se sprovodi automatski. Sa tipom „multirange“ mogu se koristiti sve ranije dostupne funkcije i operatori za obradu opsega. select multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Dodana je i podrazumevano uključena podrška za autentifikaciju radi ograničavanja pristupa GraphQL i EdgeQL putem HTTP-a.
  • Za pokretanje servisa autentifikacije koji funkcioniše odvojeno od instance Baze Podataka, dodan je dodatak „auth“ koji podržava OAuth ili prijavu putem email-a i lozinke.
  • Dodan je dodatak pgcrypto, koji pruža funkcije hmac, gen_salt i crypt za heširanje i šifrovanje. select ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Dodan je dodatak pg_trgm sa funkcijama za određivanje sličnosti između stringova.
  • Unete su optimizacije koje su omogućile poboljšanje performansi. Potrošnja memorije je strežnikom smanjena za 40%. Kod parser-a upita EdgeQL je prepisan na jeziku Rust.
  • U jezik EdgeQL dodata je podrška za više poznate sintakse uslovnih izraza (if … then .. else …). Omogućeno je korišćenje uslovnog DML-a za kreiranje, ažuriranje i brisanje raznih objekata na osnovu zadanih uslova. Dodate su funkcije to_bytes(), to_str(), enc::base64_encode i enc::base64_decode. U okidačima je omogućena upotreba izraza „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’);
  • Dodana je nova metoda za prenos globalnih vrednosti u upite GraphQL — umesto korišćenja posebnog polja, pružena je mogućnost prenosa varijabli na osnovu objekta __globals__.

    Izvor: opennet.ru
Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster