Vrystelling van die relasionele grafiek DBMS EdgeDB 2.0

Die vrystelling van die EdgeDB 2.0 DBMS word aangebied, wat die relasionele grafiekdatamodel en die EdgeQL-navraagtaal implementeer, geoptimaliseer om met komplekse hiërargiese data te werk. Die kode is geskryf in Python en Rust (ontleder en prestasie-kritiese dele) en word onder die Apache 2.0-lisensie versprei. Die projek word ontwikkel as 'n byvoeging vir PostgreSQL. Kliëntbiblioteke word voorberei vir Python, Go, Rust en TypeScript/Javascript. Verskaf opdragreëlgereedskap vir DBMS-bestuur en interaktiewe navraaguitvoering (REPL).

In plaas van 'n tabelgebaseerde datamodel, gebruik EdgeDB 'n verklarende stelsel gebaseer op objektipes. In plaas van vreemde sleutels, word koppeling deur verwysing gebruik om die verhouding tussen tipes te definieer (een voorwerp kan as 'n eienskap van 'n ander voorwerp gebruik word).

tik Persoon { vereiste eiendomnaam -> str; } tik Movie { required property title -> str; multi skakel akteurs -> Persoon; }

Indekse kan gebruik word om navraagverwerking te bespoedig. Kenmerke soos sterk eiendomtik, eiendomswaardebeperkings, berekende eienskappe en gestoorde prosedures word ook ondersteun. Kenmerke van die EdgeDB-objekbergingskema, wat ietwat aan 'n ORM herinner, sluit in die vermoë om skemas te meng, eienskappe van verskillende voorwerpe te koppel en geïntegreerde JSON-ondersteuning.

Ingeboude gereedskap word voorsien vir die stoor van skemamigrasie - nadat die skema wat in 'n aparte esdl-lêer gespesifiseer is verander is, voer net die "edgedb migration create"-opdrag uit en die DBMS sal die verskille in die skema ontleed en interaktief 'n skrip genereer vir migreer na die nuwe skema. Die geskiedenis van skemaveranderings word outomaties opgespoor.

Om navrae te genereer, word beide die GraphQL-navraagtaal en die eie EdgeDB-taal, wat 'n aanpassing van SQL vir hiërargiese data is, ondersteun. In plaas van lyste, word navraagresultate op 'n gestruktureerde manier geformateer, en in plaas van subnavrae en JOIN's, kan jy een EdgeQL-navraag as 'n uitdrukking binne 'n ander navraag spesifiseer. Transaksies en siklusse word ondersteun.

kies Movie { title, actors: { name } } filter .title = "The Matrix" voeg in Movie { title := "The Matrix Resurrections", akteurs := (kies Persoonfilter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } vir nommer in {0, 1, 2, 3} unie (kies { number, number + 0.5 } );

In die nuwe weergawe:

  • 'n Ingeboude webkoppelvlak is bygevoeg vir databasisadministrasie, wat jou toelaat om data te bekyk en te redigeer, EdgeQL-navrae uit te voer en die stoorskema wat gebruik word, te ontleed. Die koppelvlak word geloods deur die "edgedb ui"-opdrag, waarna dit beskikbaar word wanneer u toegang tot localhost verkry.
    Vrystelling van die relasionele grafiek DBMS EdgeDB 2.0
  • Die "GROEP" uitdrukking is geïmplementeer, wat jou toelaat om data te partisieer en saam te voeg en data te groepeer deur gebruik te maak van arbitrêre EdgeQL uitdrukkings, soortgelyk aan groepering in 'n SELECT bewerking.
  • Vermoë om toegang op voorwerpvlak te beheer. Toegangsreëls word op die bergingskemavlak gedefinieer en laat jou toe om die vermoë om 'n sekere stel voorwerpe te gebruik in haal-, invoeg-, uitvee- en opdateerbewerkings te beperk. Byvoorbeeld, jy kan 'n reël byvoeg wat slegs die skrywer toelaat om 'n publikasie op te dateer.
  • Bygevoeg die vermoë om globale veranderlikes in die stoor skema te gebruik. 'n Nuwe globale veranderlike current_user is voorgestel om aan die gebruiker te bind.
  • Bygevoeg ondersteuning vir tipes wat reekse van waardes definieer.
  • 'n Amptelike kliëntebiblioteek vir die Rust-taal is voorberei.
  • Die EdgeDB-binêre protokol is gestabiliseer, wat dit moontlik maak om verskeie verskillende sessies gelyktydig binne dieselfde netwerkverbinding te verwerk, aanstuur via HTTP, met behulp van globale veranderlikes en plaaslike state.
  • Bygevoeg ondersteuning vir sok-aktivering, wat jou toelaat om nie die bedienerhanteerder in die geheue te hou nie en dit slegs te laat loop wanneer jy probeer om 'n verbinding te bewerkstellig (nuttig om hulpbronne op ontwikkelaarstelsels te stoor).

Bron: opennet.ru

Voeg 'n opmerking