Den första stabila utgÄvan av EdgeDB DBMS Àr tillgÀnglig, som Àr ett tillÀgg till PostgreSQL med implementeringen av den relationella grafdatamodellen och frÄgesprÄket EdgeQL, optimerat för att arbeta med komplexa hierarkiska data. Koden Àr skriven i Python och Rust och distribueras under Apache 2.0-licensen. Klientbibliotek Àr förberedda för Python, Go, Rust och TypeScript/Javascript. TillhandahÄller kommandoradsverktyg för DBMS-hantering och interaktiv frÄgekörning (REPL).
IstÀllet för en tabellbaserad datamodell anvÀnder EdgeDB ett deklarativt system baserat pÄ objekttyper. IstÀllet för frÀmmande nycklar anvÀnds lÀnkning genom referens för att definiera relationen mellan typer (ett objekt kan anvÀndas som en egenskap för ett annat objekt). typ Person { obligatoriskt egenskapsnamn -> str; } typ Film { obligatorisk egenskapstitel -> str; flerlÀnksaktörer -> Person; }
Index kan anvÀndas för att pÄskynda frÄgebehandlingen. Funktioner som stark egenskapstypning, egenskapsvÀrdesbegrÀnsningar, berÀknade egenskaper och lagrade procedurer stöds ocksÄ. Funktioner i EdgeDB-objektlagringsschemat, som pÄminner lite om en ORM, inkluderar möjligheten att blanda scheman, lÀnka egenskaper frÄn olika objekt och integrerat JSON-stöd.
Inbyggda verktyg finns för att lagra schemamigrering - efter att ha Àndrat schemat som anges i en separat esdl-fil, kör bara kommandot "edgedb migration create" och DBMS kommer att analysera skillnaderna i schemat och interaktivt generera ett skript för migrering till nytt schema. Historiken för schemaÀndringar spÄras automatiskt.
För att generera frÄgor stöds bÄde frÄgesprÄket GraphQL och det proprietÀra EdgeDB-sprÄket, som Àr en anpassning av SQL för hierarkisk data. IstÀllet för listor formateras frÄgeresultat pÄ ett strukturerat sÀtt, och istÀllet för underfrÄgor och JOINs kan du ange en EdgeQL-frÄga som ett uttryck i en annan frÄga. Transaktioner och cykler stöds. vÀlj Film { title, actors: { name } } filter .title = "The Matrix" infoga Film { title := "The Matrix Resurrections", skÄdespelare := (vÀlj Personfilter .name i { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } för nummer i {0, 1, 2, 3} union (vÀlj { nummer, nummer + 0.5 } );
KĂ€lla: opennet.ru
