La unua stabila eldono de la interrilata grafikaĵo DBMS EdgeDB

La unua stabila eldono de la EdgeDB DBMS estas disponebla, kiu estas aldonaĵo al PostgreSQL kun la efektivigo de la interrilata grafika datummodelo kaj la demanda lingvo EdgeQL, optimumigita por labori kun kompleksaj hierarkiaj datumoj. La kodo estas skribita en Python kaj Rust kaj estas distribuita sub la licenco Apache 2.0. 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; multilink 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 propra lingvo de EdgeDB, kiu estas adapto 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 } );

fonto: opennet.ru

Aldoni komenton