Першы стабільны рэліз рэляцыйна-графавай СКБД EdgeDB

Даступны першы стабільны рэліз СКБД EdgeDB, якая ўяўляе сабой надбудову над PostgreSQL з рэалізацыяй рэляцыйна-графавай мадэлі дадзеных і мовы запытаў EdgeQL, аптымізаваных для працы са складанымі іерархічнымі дадзенымі. Код напісаны на мовах Python і Rust і распаўсюджваецца пад ліцэнзіяй Apache 2.0. Кліенцкія бібліятэкі падрыхтаваны для моў Python, Go, Rust і TypeScript/Javascript. Прадастаўляецца інструментар каманднай сцёкі для кіравання СКБД і інтэрактыўнага выканання запытаў (REPL).

Замест мадэлі дадзеных на аснове табліц у EdgeDB прымяняецца дэкларатыўная сістэма на аснове аб'ектных тыпаў. Замест знешніх ключоў (foreign key) для вызначэння сувязі паміж тыпамі прымяняецца звязванне спасылкамі (адзін аб'ект можа выкарыстоўвацца як уласцівасць іншага аб'екта). type Person { патрэбная ўласнасць імя -> str; } type Movie { required property title -> str; multi link actors -> Person; }

Для паскарэння апрацоўкі запытаў могуць прымяняцца індэксы. Падтрымліваюцца таксама такія магчымасці як строгая тыпізацыя ўласцівасцяў, абмежаванні значэнняў уласцівасцяў, якія вылічаюцца ўласцівасці і захоўваемыя працэдуры. З асаблівасцяў аб'ектнай схемы захоўвання EdgeDB, якая чымсьці нагадвае ORM, адзначаецца магчымасць змешвання схем, злучэнні ўласцівасцяў з розных аб'ектаў і інтэграваная падтрымка JSON.

Прадстаўляюцца ўбудаваныя прылады для міграцыі схемы захоўвання – пасля змены схемы, якая задаецца ў асобным esdl-файле, дастаткова выканаць каманду "edgedb migration create" і СКБД прааналізуе адрозненні ў схеме і ў інтэрактыўным рэжыме згенеруе скрыпт для пераходу на новую схему. Аўтаматычна адсочваецца гісторыя змены схемы.

Для фармавання запытаў падтрымліваецца як мова запытаў GraphQL, так і ўласная мова EdgeDB, уяўлялы сабой адаптацыю SQL для іерархічных дадзеных. Замест спісаў вынікі запыту афармляюцца ў структураваным выглядзе, а замест подзапросов і аперацый JOIN падаецца магчымасць указання аднаго запыту EdgeQL у якасці выраза ўсярэдзіне іншага запыту. Падтрымліваюцца транзакцыі і цыклы. select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( select Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss ', 'Laurence Fishburne'} } } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );

Крыніца: opennet.ru

Дадаць каментар