Dalja e DBMS-relationale EdgeDB 4.0

Rilindja e EdgeDB 4.0, një DBMS që implementon modelin relacional-grafik të të dhënave dhe gjuhën e pyetjeve EdgeQL, e optimizuar për të punuar me të dhëna hierarkike komplekse. Kodi është shkruar në gjuhët Python dhe Rust (parseri 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 klient janë përgatitur për gjuhët Python, Go, Rust, .NET, Elixir dhe TypeScript/Javascript. Ofron një mjet komande për menaxhimin e DBMS dhe ekzekutimin interaktiv të pyetjeve (REPL).

Në EdgeDB, në vend të modelit të të dhënave të bazuara në tabela, përdoret një sistem deklarativ i bazuar në tipa objektesh. Në vend të çelësave të jashtëm (foreign key) për të përkufizuar lidhjet mes tipave, është e mundur të lidhen përmes lidhjeve (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; }

Indekset mund të përdoren për të përshpejtuar përpunimin e kërkesave. Mbështeten gjithashtu mundësi të tilla si tipizimi i rigoroz i pronave, kufizimet e vlerave të pronave, pronat e llogaritur dhe procedurat e ruajtura. Një nga veçoritë e skemës objektike të ruajtjes EdgeDB, e cila ngjan disi me ORM, është mundësia e përzierjes së skemave, lidhjes së pronave nga objekte të ndryshme dhe mbështetje e integruar për JSON.

Ofrohen mjete tĂ« integruara pĂ«r migrimin e skemĂ«s sĂ« ruajtjes — pas ndryshimit tĂ« skemĂ«s, tĂ« pĂ«rcaktuar nĂ« njĂ« skedĂ« tĂ« veçantĂ« esdl, mjafton tĂ« ekzekutohet komanda "edgedb migration create" dhe DBMS do tĂ« analizohet ndryshimet nĂ« skemĂ« dhe do tĂ« gjenerojĂ« njĂ« skenar pĂ«r kalimin nĂ« skemĂ«n e re nĂ« mĂ«nyrĂ« interaktive. Historiku i ndryshimeve tĂ« skemĂ«s Ă«shtĂ« i monitoruar automatikisht.

Për formimin e pyetjeve, mbështetet si gjuha e pyetjeve GraphQL ashtu edhe gjuha e vet EdgeDB, e cila është një adaptim i SQL për të dhëna hierarkike. Në vend të listave, rezultatet e pyetjes paraqiten në një format të strukturuar, dhe në vend të nënpyetjeve dhe operacioneve JOIN, ofrohet mundësia për të caktuar një pyetje EdgeQL si një shprehje brenda një pyetje 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ë këtë version të ri:

  • Shtuar mbĂ«shtetje pĂ«r kĂ«rkimin me tekst tĂ« plotĂ«, e implementuar pĂ«rmes njĂ« moduli tĂ« plug-in fts. PĂ«r tĂ« kthyer çdo objekt nĂ« njĂ« dokument tĂ« aksesueshĂ«m pĂ«r kĂ«rkim, duhen pĂ«rdorur indeksi fts::index, ndĂ«rsa pĂ«r tĂ« kĂ«rkuar njĂ« frazĂ« tĂ« caktuar midis dokumenteve tĂ« indeksuara Ă«shtĂ« propozuar funksioni fts::search(). Rezultatet kthehen nĂ« formĂ«n e tuple-ve, tĂ« cilat pĂ«rmbajnĂ« objektin e gjetur dhe pesha e tij e kĂ«rkimit. 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 ) ); } with 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Ă« dhĂ«nash "multirange", qĂ« pĂ«rcakton njĂ« ose mĂ« shumĂ« intervale vlerash pĂ«r tĂ« pĂ«rfaqĂ«suar intervale tĂ« ndĂ«rprera. Normalizimi i zonave tĂ« mbivendosura nĂ« intervalet e dhĂ«na bĂ«het automatikisht. TĂ« gjitha funksionet dhe operatorĂ«t e mĂ«parshĂ«m pĂ«r pĂ«rpunimin e intervaleve mund tĂ« punojnĂ« me tipin "multirange". select multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Shtuar dhe aktivizuar si standart mbĂ«shtetje pĂ«r autentifikimin pĂ«r tĂ« kufizuar aksesin nĂ« GraphQL dhe EdgeQL mbi HTTP.
  • PĂ«r tĂ« nisur shĂ«rbimin e autentifikimit, qĂ« funksionon veçmas nga instanca e DB, Ă«shtĂ« shtuar njĂ« shtesĂ« "auth", qĂ« mbĂ«shtet OAuth ose hyrjen me email dhe fjalĂ«kalim.
  • Shtuar shtesĂ«n pgcrypto, qĂ« ofron funksionet hmac, gen_salt dhe crypt pĂ«r hashimin dhe enkriptimin. select ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Shtuar shtesĂ«n pg_trgm me funksione pĂ«r pĂ«rcaktimin e ngjashmĂ«risĂ« sĂ« vargjeve.
  • Optimizime janĂ« bĂ«rĂ« pĂ«r tĂ« rritur performancĂ«n. Konsumi i memories Ă«shtĂ« serveri reduktuar me 40%. Kodi i parserit 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Ă« familjare tĂ« shprehjeve kushtore (if 
 then .. else 
). Ofron mundĂ«sinĂ« e pĂ«rdorimit tĂ« DML kushtore pĂ«r krijimin, azhurnimin dhe fshirjen e objekteve tĂ« ndryshme nĂ« bazĂ« tĂ« kushteve tĂ« caktuara. Shtuar funksionet to_bytes(), to_str(), enc::base64_encode dhe enc::base64_decode. NĂ« triggere lejohet pĂ«rdorimi i shprehjes "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’);
  • Shtuar njĂ« mĂ«nyrĂ« tĂ« re pĂ«r tĂ« kaluar vlera globale nĂ« pyetje GraphQL - nĂ« vend tĂ« pĂ«rdorimit tĂ« njĂ« fushe tĂ« veçantĂ«, ofrohet mundĂ«sia pĂ«r tĂ« kaluar variablat mbi objektin __globals__.

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