Den första stabila releasen av databashanteraren EdgeDB Àr nu tillgÀnglig. Den bygger pÄ PostgreSQL och implementerar en relations-grafmodell och frÄgesprÄket EdgeQL, optimerad för arbete med komplexa hierarkiska data. Koden Àr skriven i Python och Rust och distribueras under Apache 2.0-licens. Klientbibliotek Àr tillgÀngliga för Python, Go, Rust och TypeScript/Javascript. Ett kommandoradsverktyg erbjuds för att hantera databashanteraren och interaktivt köra frÄgor (REPL).
I EdgeDB anvÀnds ett deklarativt system baserat pÄ objektstyper istÀllet för en tabellbaserad datamodell. IstÀllet för externa nycklar (foreign keys) för att definiera relationer mellan typer anvÀnds lÀnkbindningar (ett objekt kan anvÀndas som en egenskap av ett annat objekt). type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
För att pÄskynda bearbetningen av frÄgor kan index anvÀndas. Funktioner som strikt typning av egenskaper, vÀrdebegrÀnsningar, berÀknade egenskaper och lagrade procedurer stöds ocksÄ. En speciell egenskap hos EdgeDB:s objektlagringsschema, som liknar ORM, Àr möjligheten att blanda scheman, koppla egenskaper frÄn olika objekt och integrerat stöd för JSON.
Inbyggda verktyg för schema-migrering tillhandahĂ„lls â efter att schemat har Ă€ndrats i en separat esdl-fil, rĂ€cker det med att köra kommandot "edgedb migration create", sĂ„ analyserar databasen skillnaderna i schemat och genererar interaktivt ett script för att migrera till det nya schemat. Historiken för schemaĂ€ndringar spĂ„ras automatiskt.
För att formulera frĂ„gor stöds bĂ„de GraphQL och det egna EdgeDB-sprĂ„ket, som Ă€r en anpassning av SQL för hierarkiska data. IstĂ€llet för listor presenteras resultaten av frĂ„gorna i strukturerad form, och istĂ€llet för subfrĂ„gor och JOIN-operationer erbjuds möjligheten att anvĂ€nda en EdgeQL-frĂ„ga inuti en annan frĂ„ga. Transaktioner och loopar stöds. 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â } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );
KĂ€lla: opennet.ru
