Liberigo de la interrilata grafikaĵo DBMS EdgeDB 2.0

La eldono de la EdgeDB 2.0 DBMS estas prezentita, kiu efektivigas la interrilatan grafikan datummodelon kaj la demandlingvon EdgeQL, optimumigitan por labori kun kompleksaj hierarkiaj datumoj. La kodo estas skribita en Python kaj Rust (analizilo kaj agado-kritika partoj) kaj estas distribuita sub la Apache 2.0 permesilo. La projekto estas evoluigita kiel aldonaĵo por PostgreSQL. Klientbibliotekoj estas pretaj por Python, Go, Rust kaj TypeScript/Javascript. Disponigas komandliniajn ilojn por DBMS-administrado kaj interaga demanda ekzekuto (REPL).

Anstataŭ tabel-bazita datummodelo, EdgeDB uzas deklaran sistemon bazitan sur objektospecoj. Anstataŭ fremdaj ŝlosiloj, ligado de referenco estas uzata por difini la rilaton inter tipoj (unu objekto povas esti uzata kiel posedaĵo de alia objekto).

type Person { bezonata proprietnomo -> str; } tajpu Filmon { bezonata propraĵo titolo -> str; plurligaj agantoj -> Persono; }

Indeksoj povas esti uzataj por akceli demandopretigon. Trajtoj kiel forta tajpado de posedaĵoj, limigoj de posedaĵoj, komputitaj trajtoj kaj stokitaj proceduroj ankaŭ estas subtenataj. Trajtoj de la skemo de konservado de objektoj EdgeDB, kiu estas iom rememoriga pri ORM, inkluzivas la kapablon miksi skemojn, ligi ecojn de malsamaj objektoj kaj integran JSON-subtenon.

Enkonstruitaj iloj estas provizitaj por stoki skemon-migradon - post ŝanĝi la skemon specifitan en aparta esdl-dosiero, simple rulu la komandon "edgedb migration create" kaj la DBMS analizos la diferencojn en la skemo kaj interage kreos skripton por migrado al la skemo. nova skemo. La historio de skemaj ŝanĝoj estas aŭtomate spurita.

Por generi demandojn, kaj la GraphQL demandlingvo kaj la proprieta EdgeDB-lingvo, kiu estas adaptado de SQL por hierarkiaj datenoj, estas subtenataj. Anstataŭ listoj, konsultrezultoj estas formatitaj laŭ strukturita maniero, kaj anstataŭ subdemandoj kaj JOINoj, vi povas specifi unu EdgeQL-demandon kiel esprimon ene de alia demando. Transakcioj kaj cikloj estas subtenataj.

select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( elektu Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } por nombro en {0, 1, 2, 3} unio ( elektu { nombro, nombro + 0.5 } );

En la nova versio:

  • Enkonstruita TTT-interfaco estis aldonita por datumbaza administrado, permesante al vi vidi kaj redakti datumojn, ruli EdgeQL-demandojn kaj analizi la uzatan stokan skemon. La interfaco estas lanĉita per la komando "edgedb ui", post kiu ĝi fariĝas disponebla kiam vi aliras localhost.
    Liberigo de la interrilata grafikaĵo DBMS EdgeDB 2.0
  • La esprimo "GRUPO" estis efektivigita, permesante al vi dividi kaj kunigi datumojn kaj grupi datumojn uzante arbitrajn EdgeQL-esprimojn, simile al grupiĝo en SELECT operacio.
  • Kapablo kontroli aliron ĉe la objektonivelo. Alirreguloj estas difinitaj ĉe la stokadskemo-nivelo kaj permesas vin limigi la kapablon uzi certan aron da objektoj en preni, enmeti, forigi kaj ĝisdatigi operaciojn. Ekzemple, vi povas aldoni regulon, kiu permesas nur al la aŭtoro ĝisdatigi publikaĵon.
  • Aldonita la kapablo uzi tutmondajn variablojn en la stokadskemo. Nova tutmonda variablo current_user estis proponita ligi al la uzanto.
  • Aldonita subteno por tipoj kiuj difinas intervalojn de valoroj.
  • Oficiala klientbiblioteko por la Rust-lingvo estis preparita.
  • La binara protokolo EdgeDB estis stabiligita, ebligante procesi plurajn malsamajn sesiojn samtempe ene de la sama retkonekto, plusendante per HTTP, uzante tutmondajn variablojn kaj lokajn ŝtatojn.
  • Aldonita subteno por aktivigo de ingo, kiu ebligas al vi ne konservi la servilon pritraktilon en memoro kaj ruli ĝin nur kiam vi provas establi konekton (utila por ŝpari rimedojn en programistaj sistemoj).

fonto: opennet.ru

Aldoni komenton