Ë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
