Den første stabile udgivelse af den relations-grafiske databasesystem EdgeDB

Den første stabile version af databasen EdgeDB er nu tilgængelig. Den fungerer som et lag oven på PostgreSQL og implementerer en relationel-grafdatamodel samt forespørgselsproget EdgeQL, der er optimeret til komplekse hierarkiske data. Koden er skrevet i Python og Rust og distribueres under Apache 2.0 licensen. Klientbiblioteker er tilgængelige til Python, Go, Rust og TypeScript/Javascript. Der tilbydes et kommandolinjeværktøj til administration af databasen og interaktiv udførelse af forespørgsler (REPL).

I EdgeDB anvendes et deklarativt system baseret på objekttyper i stedet for tabelbaserede datamodeller. For at definere relationen mellem typerne anvendes linkbinding (et objekt kan bruges som en egenskab af et andet objekt) i stedet for fremmednøgler. type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }

For at fremskynde behandling af forespørgsler kan der anvendes indekser. Der understøttes også funktioner som streng typificering af egenskaber, begrænsninger for værdier, beregnede egenskaber og gemte procedurer. I EdgeDB's objektlagringsskema, som minder om ORM, er der mulighed for at blande skemaer, knytte egenskaber fra forskellige objekter og integreret JSON-understøttelse.

Indbyggede værktøjer til migrering af lagringsskemaet tilbydes — efter ændring af skemaet, der angives i en separat esdl-fil, er det tilstrækkeligt at udføre kommandoen "edgedb migration create", og databasen vil analysere forskellene i skemaet og interaktivt generere et script til overgangen til det nye skema. Historikken for ændringer i skemaet spores automatisk.

For forespørgsler understøttes både GraphQL og det specielle EdgeDB-sprog, der er en tilpasning af SQL til hierarkiske data. I stedet for lister præsenteres forespørgselsresultater i struktureret form, og i stedet for underforespørgsler og JOIN-operationer er der mulighed for at indtaste én EdgeQL-forespørgsel som et udtryk inde i en anden forespørgsel. Transaktioner og loops understøttes. 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 } );

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster