Versioni e EdgeDB 5.0 është në dispozicion, e cila zbaton modelin e të dhënave të marrëdhënieve-graf dhe gjuhën e kërkimeve EdgeQL, të optimizuara për punën me të dhëna komplekse dhe hierarkike. Projekti zhvillohet si një shtesë mbi PostgreSQL, ku kodi është shkruar në gjuhët Python dhe Rust (parser dhe pjesët kritike për performancën), dhe shpërndahet nën licencën Apache 2.0. Bibliotekat për klientët 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 për ekzekutimin interaktiv të kërkesave (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; }
Mbështeten mundësi të tilla si tipizimi i rreptë i pronave, kufizimet e vlerave të pronave, pronat e llogaritura dhe procedurat e ruajtura. Një nga veçoritë e skemës objektore të ruajtjes EdgeDB, e cila ngjan 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. Për të përshpejtuar përpunimin e kërkesave mund të përdoren indekse.
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 kërkesave mbështetet gjuha e kërkesave GraphQL dhe gjuha e saj EdgeDB, e cila përfaqëson një adaptim të SQL për të dhëna hierarkike. Në vend të listave, rezultatet e kërkesës paraqiten në një formë të strukturuar, ndërsa në vend të nënkërkesave dhe operacioneve JOIN ofrohet mundësia e caktimit 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:
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r degĂ«zimin, qĂ« lejon pĂ«rdorimin e konceptit tĂ« dega nĂ« punĂ«n me tĂ« dhĂ«nat dhe skemat, e cila pĂ«rdoret nĂ« sistemet e menaxhimit tĂ« versioneve. NĂ« vend tĂ« termit "baza e tĂ« dhĂ«nave" nĂ« lĂ«shimin e ri Ă«shtĂ« propozuar koncepti "dega" (branch), dhe komandat "create database" dhe "drop database" janĂ« shpallur tĂ« tejkaluara dhe nĂ« vend tĂ« tyre rekomandohet tĂ« pĂ«rdoren komandat e 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Ă«zim nga degĂ«t dhe DB e ekzistuese, duke kopjuar prej tyre skemĂ«n e ruajtjes dhe tĂ« dhĂ«nat.
Nga një aspekt praktik, mbështetja e degëve lejon që të sinkronizohen të dhënat me kodin që përdoret për përpunimin e tyre, duke ruajtur kështu pajtueshmërinë me kodin e vjetër. Për shembull, pas përditësimit të kodit, mund të lidhet një degë e re e të dhënave, që merr parasysh ndryshimin e përfshirë në skemën e ruajtjes. Kjo funksionalitet është e përshtatshme për të lehtësuar zhvillimin dhe testimin e versioneve të reja të softuerit, pasi që është e mjaftueshme të kalosh në degën e testuar tashmë.
- Në zgjerimin pgvector, i aplikuar për ruajtjen dhe kërkimin efikas të vektorëve, është shtuar një lloj i ri indexesh HNSW (Hierarchical Navigable Small Worlds), i cili, në përputhje me indexin 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 optimizimin e indexeve nëpërmjet objekteve ext::pgvector::Config.
- JanĂ« shtuar mundĂ«si tĂ« reja tĂ« autentifikimit. NĂ« zgjerimin auth Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r skemat e autentifikimit pa fjalĂ«kalim WebAuthn (Passkeys) dhe "magic links" (nĂ« bazĂ« tĂ« email). ĂshtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rdorimin e platformave Slack dhe Discord si ofrues OAuth.
- Janë realizuar optimizime të performancës. Në implementimin e caches së rezultateve të përpilimeve të pyetjeve është siguruar ruajtja e gjendjes ndërmjet rindezjeve dhe është shtuar automatizimi i ripërpilimit pas migrimit. Shpejtësia e punës me skemat e mëdha të ruajtjes është përshpejtuar.
- Në gjuhën e pyetjeve EdgeQL, në shprehjen "for", është lejuar të mos tregosh fjalën kyç "union" në kërkesat bazë, në të cilat përdoren shprehjet insert, update ose delete.
- ĂshtĂ« shtuar komandĂ« vacuum() pĂ«r pastrimin, optimizimin dhe paketimin e pĂ«rmbajtjes sĂ« DB.
- ĂshtĂ« lejuar 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Ă« shtuar mundĂ«sia pĂ«r tĂ« mbyllur tĂ« gjitha lidhjet me DB pas ekzekutimit tĂ« operacionit "drop database".
Burimi: opennet.ru
