Ir pieejams EdgeDB 5.0 datubāzu pārvaldnieka izlaišana, kas realizē relāciju-grafu datu modeli un EdgeQL vaicājumu valodu, optimizētu darbam ar sarežģītiem hierarhiskiem datiem. Projekts attīstās kā paplašinājums virs PostgreSQL, kura kods rakstīts Python un Rust valodās (parsēšana un veiktspējas kritiskās daļas) un to izplata ar Apache 2.0 licenci. Klientu bibliotēkas ir sagatavotas Python, Go, Rust, .NET, Elixir un TypeScript/JavaScript valodām. Ir pieejams komandrindas rīku komplekts datubāzes pārvaldībai un interaktīvu vaicājumu izpildei (REPL).
Izmantojot EdgeDB, tiek izmantota deklaratīva sistēma, kas balstās uz objektu tipiem, nevis tabulu balstītu datu modeli. Lai noteiktu saites starp tipiem, tiek izmantota saistīšana ar atsaucēm (viens objekts var tikt izmantots kā cita objekta īpašība) nevis ārējie atslēgas.
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Atbalsta tādas iespējas kā stingra īpašību tipizācija, īpašību vērtību ierobežojumi, aprēķinātās īpašības un uzglabātās procedūras. No EdgeDB objektu uzglabāšanas shēmas īpatnībām, kas nedaudz atgādina ORM, jāatzīmē shēmu sajaukšanas iespēja, īpašību sasaistīšana no dažādiem objektiem un iebūvēta JSON atbalsts. Lai paātrinātu vaicājumu izpildi, var tikt izmantoti indeksi.
Ir pieejami iebūvēti instrumenti uzglabāšanas shēmas migrēšanai — pēc shēmas izmaiņām, kas norādītas atsevišķā esdl failā, pietiek ar komandas "edgedb migration create" izpildi, un datubāzes pārvaldnieks analizēs atšķirības shēmā un interaktīvā režīmā ģenerēs skriptu pārejai uz jauno shēmu. Automātiski tiek izsekota shēmas izmaiņu vēsture.
Vaicājumu veidošanai tiek atbalstīta GraphQL vaicājumu valoda un pati EdgeDB valoda, kas ir SQL adaptācija hierarhiskajiem datiem. Rezultāti tiek noformēti strukturētā veidā, nevis sarakstos, un vietā, kur parasti tiek izmantoti apakšvaicājumi un JOIN operācijas, ir iespēja norādīt vienu EdgeQL vaicājumu kā izteiksmi cita vaicājuma iekšienē. Tiek atbalstītas transakcijas un cikli.
izvēlies Filmu { nosaukums, aktieri: { vārds } } filtrēt .nosaukums = «Matrix» pievienot Filmu { nosaukums := «Matrix Resurrections», aktieri := ( izvēlies Personu filtrēt .vārds iekš { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }
Jaunajā versijā:
- Pievienota atbalsta sistēma zaru («branching»), kas ļauj izmantot datu un shēmu apstrādē zaru jēdzienu, ko lieto versiju vadības sistēmās. Jaunajā laidienā termins «datu bāze» tiek aizstāts ar jēdzienu «zars» (branch), un komandas «create database» un «drop database» ir atzītas par novecojām un to vietā ieteicams izdot jaunas komandas «create empty branch» un «drop branch». Papildus tukšiem zariem ar komandām «create schema branch» un «create data branch» ir iespējams izveidot atzarojumus no esošajiem zariem un DB, kopējot no tiem glabāšanas shēmu un datus.
Praktiski zaru atbalsts ļauj sinhronizēt datus ar kodu, kas tiek izmantots to apstrādē, saglabājot saderību ar veco kodu. Piemēram, pēc koda atjaunināšanas ir iespējams piesaistīt tam jaunu datu zaru, ņemot vērā veiktās izmaiņas glabāšanas shēmā. Apskatītā funkcionalitāte ir ērta jaunu programmatūras versiju attīstīšanai un testēšanai, pēc kuru gatavības pietiek pāriet uz jau pārbaudītu zaru.
- Paplašinājumā pgvector, kas tiek izmantots efektīvai vektoru glabāšanai un pieprasīšanai, pievienots jauns indeksu veids HNSW (Hierarchical Navigable Small Worlds), kas, līdzīgi IVFFlat indeksam, ir pieejams trīs variantos: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip un ext::pgvector::hnsw_cosine. Turklāt pgvector ir paplašinātas indeksu optimizācijas iespējas, izmantojot objektu ext::pgvector::Config.
- Pievienotas papildu autentifikācijas iespējas. Paplašinājumā auth ieviests atbalsts paroles nesaturošām autentifikācijas shēmām WebAuthn (Passkeys) un «magic links» (pamatojoties uz email). Pieejams atbalsts platformām Slack un Discord kā OAuth nodrošinātājiem.
- Ieviestas veiktspējas optimizācijas. Ieviešot kešatmiņu ar pieprasījumu kompilācijas rezultātiem, nodrošināta stāvokļa saglabāšana starp pārstartēšanām un pievienota automātiska atkārtota kompilācija pēc migrācijas. Palielināta efektivitāte lielu glabāšanas shēmu apstrādē.
- EdgeQL vaicājuma valodā izteiksmē 'for' nav obligāti jānorāda atslēgvārds 'union' pamata vaicājumos, kuros tiek izmantotas izteiksmes insert, update vai delete.
- Pievienota komanda vacuum() datubāzes satura tīrīšanai, optimizēšanai un iepakošanai.
- Atļauta datu pārvēršana starp bytes un int16, int32, int64 un uuid tipiem, izmantojot funkcijas to_bytes(), to_uuid() un to_int*().
- Pievienota iespēja aizvērt visus savienojumus uz datubāzi pēc operācijas 'drop database' izpildes.
Avots: opennet.lv
