Release van de relationele grafiek DBMS EdgeDB 2.0

De release van EdgeDB 2.0 DBMS wordt gepresenteerd, die het relationele grafiekgegevensmodel en de EdgeQL-querytaal implementeert, geoptimaliseerd voor het werken met complexe hiërarchische gegevens. De code is geschreven in Python en Rust (parser en prestatiekritische delen) en wordt gedistribueerd onder de Apache 2.0-licentie. Het project wordt ontwikkeld als add-on voor PostgreSQL. Clientbibliotheken zijn voorbereid voor Python, Go, Rust en TypeScript/Javascript. Biedt opdrachtregelhulpmiddelen voor DBMS-beheer en interactieve query-uitvoering (REPL).

In plaats van een op tabellen gebaseerd gegevensmodel gebruikt EdgeDB een declaratief systeem op basis van objecttypen. In plaats van externe sleutels wordt linking by reference gebruikt om de relatie tussen typen te definiëren (het ene object kan worden gebruikt als eigenschap van een ander object).

type Persoon { vereiste eigenschapsnaam -> str; } type Film { vereiste eigenschapstitel -> str; multi-link actoren -> Persoon; }

Indexen kunnen worden gebruikt om de verwerking van zoekopdrachten te versnellen. Functies zoals sterke eigenschapstypering, beperkingen voor de waarde van eigendommen, berekende eigenschappen en opgeslagen procedures worden ook ondersteund. Kenmerken van het EdgeDB-objectopslagschema, dat enigszins doet denken aan een ORM, omvatten de mogelijkheid om schema's te combineren, eigenschappen van verschillende objecten te koppelen en geïntegreerde JSON-ondersteuning.

Er zijn ingebouwde tools beschikbaar voor het opslaan van schemamigratie - na het wijzigen van het schema dat is opgegeven in een afzonderlijk esdl-bestand, voert u gewoon de opdracht "edgedb migratie create" uit en het DBMS analyseert de verschillen in het schema en genereert interactief een script voor migratie naar het nieuw schema. De geschiedenis van schemawijzigingen wordt automatisch bijgehouden.

Om queries te genereren worden zowel de GraphQL-querytaal als de eigen EdgeDB-taal, een aanpassing van SQL voor hiërarchische gegevens, ondersteund. In plaats van lijsten worden de queryresultaten op een gestructureerde manier opgemaakt, en in plaats van subquery's en JOIN's kunt u één EdgeQL-query opgeven als expressie binnen een andere query. Transacties en cycli worden ondersteund.

selecteer film { titel, acteurs: { naam } } filter .title = "The Matrix" voeg film in { title := "The Matrix Resurrections", acteurs := ( selecteer persoonsfilter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } voor getal in {0, 1, 2, 3} unie (selecteer { getal, getal + 0.5 });

In de nieuwe versie:

  • Er is een ingebouwde webinterface toegevoegd voor databasebeheer, waarmee u gegevens kunt bekijken en bewerken, EdgeQL-query's kunt uitvoeren en het gebruikte opslagschema kunt analyseren. De interface wordt gestart door de opdracht “edgedb ui”, waarna deze beschikbaar komt bij toegang tot localhost.
    Release van de relationele grafiek DBMS EdgeDB 2.0
  • De expressie “GROUP” is geïmplementeerd, waardoor u gegevens kunt partitioneren en aggregeren en gegevens kunt groeperen met behulp van willekeurige EdgeQL-expressies, vergelijkbaar met groeperen in een SELECT-bewerking.
  • Mogelijkheid om de toegang op objectniveau te beheren. Toegangsregels worden gedefinieerd op opslagschemaniveau en stellen u in staat de mogelijkheid te beperken om een ​​bepaalde set objecten te gebruiken bij ophaal-, invoeg-, verwijder- en updatebewerkingen. U kunt bijvoorbeeld een regel toevoegen die alleen de auteur toestaat een publicatie bij te werken.
  • De mogelijkheid toegevoegd om globale variabelen te gebruiken in het opslagschema. Er is voorgesteld een nieuwe globale variabele current_user te binden aan de gebruiker.
  • Ondersteuning toegevoegd voor typen die waardenbereiken definiëren.
  • Er is een officiële clientbibliotheek voor de Rust-taal opgesteld.
  • Het binaire EdgeDB-protocol is gestabiliseerd, waardoor het mogelijk is om meerdere sessies tegelijkertijd binnen dezelfde netwerkverbinding te verwerken, door te sturen via HTTP, met behulp van globale variabelen en lokale statussen.
  • Ondersteuning toegevoegd voor socket-activering, waardoor u de serverhandler niet in het geheugen kunt bewaren en deze alleen kunt uitvoeren wanneer u probeert een verbinding tot stand te brengen (handig voor het besparen van bronnen op ontwikkelaarssystemen).

Bron: opennet.ru

Voeg een reactie