Objavljen je izdanak SUSTAV-a EDGE DB 2.0, koji implementira relacijsko-grafički model podataka i jezik upita EdgeQL, optimiziran za rad s kompleksnim hijerarhijskim podacima. Kod je napisan na jezicima Python i Rust (parser i dijelovi ključni za performanse) i distribuiran je pod licencom Apache 2.0. Projekt se razvija kao nadogradnja na PostgreSQL. Klijentske biblioteke su pripremljene za jezike Python, Go, Rust i TypeScript/Javascript. Osigurana je komandna linija za upravljanje SUSTAV-om i interaktivno izvođenje upita (REPL).
Umjesto modela podataka temeljenog na tablicama, EDGE DB koristi deklarativni sustav temeljen na objektno-orijentiranim tipovima. Umjesto stranih ključeva (foreign key) za definiranje odnosa između tipova koristi se povezivanje referencama (jedan objekt može se koristiti kao svojstvo drugog objekta).
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Za ubrzanje obrade upita mogu se koristiti indeksi. Također se podržavaju mogućnosti kao što su stroga tipizacija svojstava, ograničenja vrijednosti svojstava, izračunata svojstva i pohranjene procedure. Od značajki objektne sheme pohrane EDGE DB, koja donekle nalikuje ORM-u, ističe se mogućnost miješanja shema, povezivanja svojstava iz različitih objekata i integrirana podrška za JSON.
Osigurani su ugrađeni alati za migraciju sheme pohrane — nakon promjene sheme, definirane u posebnoj esdl datoteci, dovoljno je izvršiti naredbu 'edgedb migration create' i SUSTAV će analizirati razlike u shemi te u interaktivnom načinu generirati skriptu za prijelaz na novu shemu. Automatski se prati povijest promjene sheme.
Za formiranje upita podržava se i jezik upita GraphQL, kao i vlastiti jezik EDGE DB, koji predstavlja prilagodbu SQL-a za hijerarhijske podatke. Umjesto popisa, rezultati upita prikazuju se u strukturiranom obliku, dok se umjesto podupita i operacija JOIN pruža mogućnost specificiranja jednog EdgeQL upita kao izraza unutar drugog upita. Podržane su transakcije i petlje.
izaberi Film { naslov, glumci: { ime } } filtriraj .naslov = «The Matrix» dodaj Film { naslov := «The Matrix Resurrections», glumci := ( izaberi Osobu filtriraj .ime u { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) } za broj u {0, 1, 2, 3} ujedini ( izaberi { broj, broj + 0.5 } );
U novoj verziji:
- Dodano ugrađeno web sučelje za administraciju Baze podataka, koje omogućuje pregled i uređivanje podataka, izvođenje EdgeQL upita i analizu primjenjive sheme pohrane. Sučelje se pokreće naredbom «edgedb ui», nakon čega je dostupno na localhost.

- Implementirano je izraz «GROUP», koje omogućava sekcioniranje i agregiranje podataka te izvođenje grupiranja podataka prema proizvoljnim izraženjima EdgeQL, analogno grupiranju u operaciji SELECT.
- Mogućnost upravljanja pristupom na razini objekata. Pravila pristupa definiraju se na razini sheme pohrane i omogućuju ograničavanje korištenja određenog skupa objekata u operacijama odabira, umetanja, brisanja i ažuriranja. Na primjer, može se dodati pravilo koje dopušta ažuriranje objave samo autoru.
- Dodana mogućnost korištenja globalnih varijabli u shemi pohrane. Za vezanje uz korisnika predložena je nova globalna varijabla current_user.
- Dodana podrška za tipove koji definiraju opsege vrijednosti (range).
- Pripremljena službena klijentska biblioteka za jezik Rust.
- Stabiliziran binaarni protokol EdgeDB, u kojem je dodana mogućnost obrade više različitih sesija unutar jednog mrežnog povezivanja, prosljeđivanja putem HTTP-a, korištenja globalnih varijabli i lokalnih stanja.
- Dodana podrška za aktivaciju putem socketa, što omogućava da se poslužiteljski obrađivač ne drži u memoriji i da se pokreće samo pri pokušaju uspostavljanja veze (korisno za uštedu resursa na razvojnim sustavima).
Izvor: opennet.ru

