ĂshtĂ« nĂ« dispozicion versioni i sistemit tĂ« menaxhimit tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave EdgeDB 5.0, i cili implementon modelin relacional-grafik tĂ« tĂ« dhĂ«nave dhe gjuhĂ«n e pyetjeve EdgeQL, tĂ« optimizuara pĂ«r tĂ« punuar me tĂ« dhĂ«na hierarkike komplekse. Projekti zhvillohet si njĂ« shtresĂ« mbi PostgreSQL, dhe kodi i tij Ă«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. Bibliotekat klientitore janĂ« pĂ«rgatitur pĂ«r gjuhĂ«t Python, Go, Rust. .NET, Elixir dhe TypeScript/Javascript. Ofron njĂ« mjete komandash pĂ«r menaxhimin e bazĂ«s sĂ« tĂ« dhĂ«nave 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; }
Përfshihen mundësi si tipizimi strikt i vetive, kufizimet e vlerave të vetive, vetitë e llogaritura dhe procedurat e ruajtura. Nga karakteristikat e strukturës objektore të EdgeDB, e cila ngjan disi me ORM, theksohet mundësia e përzierjes së skemave, lidhjes së vetive nga objekte të ndryshme dhe mbështetje e integruar për JSON. Për të aceleruar përpunimin e pyetjeve mund të përdoren indekse.
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 formësimin e pyetjeve përkrahet gjuha e pyetjeve GraphQL dhe gjuha e saj EdgeDB, e cila është një adaptim i SQL për të dhëna hierarkike. Në vend të listave, rezultatet e pyetjes formatohen në mënyrë strukturore, dhe në vend të nënpyetjeve dhe operacioneve JOIN, ofrohet mundësia e caktimit të 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 degëzimin (branching), e cila lejon përdorimin e konceptit të degëve gjatë punës me të dhëna dhe skema, të përdorur në sistemet e menaxhimit të versioneve. Në vend të termit "baza e të dhënave", në versionin e ri propozohet termi "dege" (branch), dhe komandat "create database" dhe "drop database" janë shpallur të vjetruara dhe në vend të tyre rekomandohet përdorimi i komandave të reja "create empty branch" dhe "drop branch". Përveç degëve të zbrazëta, me komandat "create schema branch" dhe "create data branch" mund të krijohen degë nga degët dhe bazat ekzistuese, duke kopjuar nga ato skemën e ruajtjes dhe të dhënat.
Nga një këndvështrim praktik, mbështetja për degëzimin lejon sinkronizimin e të dhënave me kodin që përdoret për përpunimin e tyre, duke ruajtur kështu përputhshmërinë me kodin e vjetër. Për shembull, pas përditësimit të kodit, është e mundur të lidhni një degë të re të të dhënave, e cila merr parasysh ndryshimet e bëra në skemën e ruajtjes. Kjo funksionalitet është e përshtatshme për të thjeshtuar zhvillimin dhe testimin e varianteve të reja të softuerit, pasi pas gatishmërisë së tyre mjafton të kaloni në degën e testuar.
- Në zgjerimin pgvector, i cili është përdorur për ruajtjen dhe pyetjen efikase të vektorëve, është shtuar një tip i ri indeksi HNSW (Hierarchical Navigable Small Worlds), i cili, ngjashëm me indekset IVFFlat, është i disponueshëm në tri variante: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip dhe ext::pgvector::hnsw_cosine. Për më tepër, në pgvector janë zgjeruar mundësitë për përshtatjen e hollësishme të indekseve përmes objektit ext::pgvector::Config.
- JanĂ« shtuar mundĂ«si tĂ« reja autentikimi. NĂ« zgjerimin auth Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r skemat pa fjalĂ«kalim tĂ« autentikimit WebAuthn (Passkeys) dhe "magjia lidhjet" (bazuar nĂ« email). ĂshtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rdorimin e platformave Slack dhe Discord si ofrues tĂ« OAuth.
- JanĂ« bĂ«rĂ« optimizime pĂ«r performancĂ«n. NĂ« realizimin e caches me rezultatet e kompilimit tĂ« pyetjeve Ă«shtĂ« siguruar ruajtja e gjendjes mes riparimeve dhe Ă«shtĂ« shtuar pĂ«rkompilimi automatik pas migrimit. ĂshtĂ« rritur shpejtĂ«sia e punĂ«s me skema tĂ« mĂ«dha ruajtjeje.
- Në gjuhën e pyetjeve EdgeQL, në shprehjen "for" lejohet të mos citohet fjala kyçe "union" në pyetje bazike, ku përdoren shprehjet insert, update ose delete.
- Janë shtuar komanda vacuum() për pastrimin, optimizimin dhe paketimin e përmbajtjes së bazës së të dhënave.
- Lejohet konvertimi i të dhënave midis tipit bytes dhe tipeve int16, int32, int64 dhe uuid, duke përdorur funksionet to_bytes(), to_uuid() dhe to_int*().
- ĂshtĂ« e mundur tĂ« mbyllen tĂ« gjitha lidhjet me bazĂ«n e tĂ« dhĂ«nave pas kryerjes sĂ« operacionit "drop database".
Burimi: opennet.ru
