Lëshimi i DBMS për lidhje-relacionale EdgeDB 4.0

U prezantua versioni i DBMS EdgeDB 4.0, i cili implementon modelin e të dhënave lidhore-grafik dhe gjuhën e pyetjeve EdgeQL, të optimizuar për punën me të dhëna komplekse hierarkike. Kodi është shkruar në gjuhët Python dhe Rust (analizuesi dhe pjesët kritike për performancën) dhe shpërndahet nën licencën Apache 2.0. Projekti zhvillohet si një shtesë mbi PostgreSQL. Bibliotekat e klientëve janë përgatitur për gjuhët Python, Go, Rust, .NET, Elixir dhe TypeScript/Javascript. Ofron një mjet komandash për menaxhimin e DBMS dhe ekzekutimin interaktiv të pyetjeve (REPL).

Në vend të modelit të të dhënave të bazuar në tabela, EdgeDB përdor një sistem deklarativ të bazuar në tipe objektesh. Në vend të çelësave të jashtëm (foreign key) për të përcaktuar lidhjet mes tipeve, përdoret lidhja me referenca (një objekt mund të përdoret si një pronë e një objekti tjetër).

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

Për të përshpejtuar përpunimin e pyetjeve, mund të përdoren indekse. Nga këto mundësi, mbështeten gjithashtu tipizimi strikt i pronave, kufizimet e vlerave të pronave, pronat e llogaritura dhe procedurat e ruajtura. Një tipar i veçantë i skemës objektuale të ruajtjes në EdgeDB, e cila përshtatet me ORM-në, është mundësia për të përzier skema, lidhjen e pronave nga objekte të ndryshme dhe mbështetje e integruar për JSON.

Ofron mjete të integruara për migrimin e skemës së ruajtjes - pas ndryshimit të skemës, të përcaktuar në një skedar të veçantë esdl, mjafton të ekzekutoni komandën "edgedb migration create" dhe SGBD analizojnë diferencialet në skemë dhe në mënyrë interaktive gjeneron një skript për kalimin në skemën e re. Historia e ndryshimit të skemës ndiqet automatikisht.

Për formimin e pyetjeve, mbështetet si gjuhë pyetjesh GraphQL, ashtu edhe gjuha e saj EdgeDB, e cila është një përshtatje e SQL për të dhënat hierarkike. Në vend të LISTAVE, rezultatet e pyetjeve paraqiten në format të strukturuar, ndërsa në vend të nënpyetjeve dhe operacioneve JOIN ofrohet mundësia e specifikimit të një kërkese EdgeQL si një shprehje brenda një kërkese tjetër. Mbështeten transaksionet dhe ciklet.

select Movie { title, actors: { name } } filter .title = «The Matrix» insert Movie { title := «The Matrix Resurrections», actors := ( select Person filter .name in { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }

NĂ« versionin e ri:

  • Shtuar mbĂ«shtetje pĂ«r kĂ«rkimin me tekst tĂ« plotĂ«, i implementuar pĂ«rmes modulit tĂ« ngarkueshĂ«m fts. PĂ«r tĂ« shndĂ«rruar çdo objekt nĂ« njĂ« dokument tĂ« kĂ«rkueshĂ«m, duhet tĂ« pĂ«rdoret indeksi fts::index, ndĂ«rsa pĂ«r tĂ« kĂ«rkuar njĂ« frazĂ« tĂ« caktuar ndĂ«r dokumentet e indekzuara, Ă«shtĂ« propozuar funksioni fts::search(). Rezultatet kthehen si tuple, tĂ« cilat pĂ«rmbajnĂ« objektin e gjetur dhe peshĂ«n e tij tĂ« kĂ«rkimit. PĂ«r shembull: 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 ) ); } me res := ( select fts::search(Item, ‘candy corn’, language := ‘eng’) ) select res.object {name, score := res.score} order by res.score desc;
  • Shtuar njĂ« tip tĂ« ri tĂ« tĂ« dhĂ«nave «multirange», pĂ«rcaktuar pĂ«r njĂ« ose mĂ« shumĂ« intervale vlerash pĂ«r tĂ« pĂ«rfaqĂ«suar intervalet e prera. Normalizimi i fushave qĂ« mbivendosen nĂ« intervalet e pĂ«rcaktuara kryhet automatikisht. Me tipin «multirange» mund tĂ« punojmĂ« me tĂ« gjitha funksionet dhe operatorĂ«t e mĂ«parshĂ«m tĂ« disponueshĂ«m pĂ«r trajtimin e intervaleve. select multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Shtuar dhe aktive nĂ« mĂ«nyrĂ« tĂ« parazgjedhur mbĂ«shtetje pĂ«r autentifikimin pĂ«r tĂ« kufizuar qasjen nĂ« GraphQL dhe EdgeQL mbi HTTP.
  • PĂ«r tĂ« nisur shĂ«rbimin e autentifikimit, qĂ« funksionon ndarĂ« nga instanca e DB, Ă«shtĂ« shtuar zgjerimi «auth», i cili mbĂ«shtet OAuth ose hyrjen pĂ«rmes email-it dhe fjalĂ«kalimit.
  • Shtuar zgjerimin pgcrypto, i cili ofron funksionet hmac, gen_salt dhe crypt pĂ«r hashim dhe enkriptim. select ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Shtuar zgjerimin pg_trgm me funksione pĂ«r tĂ« pĂ«rcaktuar ngjashmĂ«rinĂ« e vargjeve.
  • BĂ«hen optimizime qĂ« rrisin performancĂ«n. Konsumi i memories Ă«shtĂ« server reduktuar me 40%. Kodi i analizuesit tĂ« pyetjeve EdgeQL Ă«shtĂ« shkruar pĂ«rsĂ«ri nĂ« gjuhĂ«n Rust.
  • NĂ« gjuhĂ«n EdgeQL Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r njĂ« sintaksĂ« mĂ« tĂ« njohur tĂ« shprehjeve kushtetuese (nĂ«se... atĂ«herĂ«... tjetĂ«r... ). Ă«shtĂ« siguruar mundĂ«sia e pĂ«rdorimit tĂ« DML kushtetues pĂ«r krijimin, pĂ«rditĂ«simin dhe fshirjen e objekteve tĂ« ndryshme nĂ« bazĂ« tĂ« kushteve tĂ« caktuara. JanĂ« shtuar funksionet to_bytes(), to_str(), enc::base64_encode dhe enc::base64_decode. NĂ« trigger-at Ă«shtĂ« lejuar pĂ«rdorimi i shprehjes "kur". select if count(Object) > 0 then 'kemi tĂ« dhĂ«na' else 'nuk kemi tĂ« dhĂ«na'; select (select User filter .name = 'Alice') ?? (insert User { name := 'Alice' }); select enc::base64_encode(b'hello');
  • ÈshtĂ« shtuar njĂ« mĂ«nyrĂ« e re pĂ«r tĂ« transmetuar vlera globale nĂ« kĂ«rkesat GraphQL - nĂ« vend tĂ« pĂ«rdorimit tĂ« njĂ« fushe tĂ« veçantĂ«, Ă«shtĂ« siguruar mundĂ«sia e transmetimit tĂ« variablave mbi bazĂ«n e objektit __globals__.

    Burimi: opennet.ru
Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster