Release av relationsgrafen DBMS EdgeDB 2.0

Releasen av EdgeDB 2.0 DBMS presenteras, som implementerar den relationella grafdatamodellen och frågespråket EdgeQL, optimerat för att arbeta med komplexa hierarkiska data. Koden är skriven i Python och Rust (parser och prestandakritiska delar) och distribueras under Apache 2.0-licensen. Projektet utvecklas som ett tillägg för PostgreSQL. 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 } );

I den nya versionen:

  • Ett inbyggt webbgränssnitt har lagts till för databasadministration, så att du kan visa och redigera data, köra EdgeQL-frågor och analysera lagringsschemat som används. Gränssnittet startas av kommandot "edgedb ui", varefter det blir tillgängligt när du kommer åt localhost.
    Release av relationsgrafen DBMS EdgeDB 2.0
  • "GROUP"-uttrycket har implementerats, vilket gör att du kan partitionera och aggregera data och gruppera data med godtyckliga EdgeQL-uttryck, liknande gruppering i en SELECT-operation.
  • Möjlighet att kontrollera åtkomst på objektnivå. Åtkomstregler definieras på lagringsschemanivå och låter dig begränsa möjligheten att använda en viss uppsättning objekt i hämtnings-, infognings-, raderings- och uppdateringsoperationer. Du kan till exempel lägga till en regel som tillåter endast författaren att uppdatera en publikation.
  • Lade till möjligheten att använda globala variabler i lagringsschemat. En ny global variabel current_user har föreslagits för att binda till användaren.
  • Lade till stöd för typer som definierar värdeintervall.
  • Ett officiellt kundbibliotek för språket Rust har utarbetats.
  • Det binära protokollet EdgeDB har stabiliserats, vilket gör det möjligt att behandla flera olika sessioner samtidigt inom samma nätverksanslutning, vidarebefordran via HTTP, med hjälp av globala variabler och lokala tillstånd.
  • Tillagt stöd för socketaktivering, vilket gör att du inte kan behålla serverhanteraren i minnet och endast köra den när du försöker upprätta en anslutning (användbart för att spara resurser på utvecklarsystem).

Källa: opennet.ru

Lägg en kommentar