Выпуск рэляцыйна-графавай СКБД EdgeDB 2.0

Прадстаўлены рэліз СКБД EdgeDB 2.0, якая рэалізуе рэляцыйна-графавую мадэль дадзеных і мова запытаў EdgeQL, аптымізаваныя для працы са складанымі іерархічнымі дадзенымі. Код напісаны на мовах Python і Rust (парсер і крытычныя да прадукцыйнасці часткі) і распаўсюджваецца пад ліцэнзіяй Apache 2.0. Праект развіваецца ў форме надбудовы над PostgreSQL. Кліенцкія бібліятэкі падрыхтаваны для моў 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 } );

У новай версіі:

  • Дададзены ўбудаваны web-інтэрфейс для адміністравання БД, які дазваляе праглядаць і рэдагаваць дадзеныя, выконваць запыты EdgeQL і аналізаваць ужывальную схему захоўвання. Інтэрфейс запускаецца камандай "edgedb ui", пасля выканання якой становіцца даступны пры звароце да localhost.
    Выпуск рэляцыйна-графавай СКБД EdgeDB 2.0
  • Рэалізаваны выраз "GROUP", які дазваляе секцыянаваць і агрэгаваць дадзеныя і выконваць групоўку дадзеных па адвольных выразах EdgeQL па аналогіі з групоўкай у аперацыі SELECT.
  • Магчымасць кіравання доступам на ўзроўні аб'ектаў. Правілы доступу вызначаюцца на ўзроўні схемы захоўвання і дазваляюць абмежаваць магчымасць выкарыстання вызначанага набору аб'ектаў у аперацыях выбаркі, устаўкі, выдаленні і абнаўленні. Напрыклад, можна дадаць правіла, якое дазваляе абнаўленне публікацыі толькі аўтару.
  • Дададзена магчымасць выкарыстання глабальных зменных у схеме захоўвання. Для прывязкі да карыстача прапанавана новая глабальная зменная current_user.
  • Дададзена падтрымка тыпаў, якія вызначаюць дыяпазоны значэнняў (range).
  • Падрыхтавана афіцыйная кліенцкая бібліятэка для мовы Rust.
  • Стабілізаваны бінарны пратакол EdgeDB, у якім з'явілася магчымасць апрацоўкі адначасова некалькіх розных сеансаў у рамках аднаго сеткавага злучэння, пракіда праз HTTP, выкарыстанні глабальных зменных і лакальных станаў.
  • Дададзена падтрымка актывацыі па сокеце, якая дазваляе не трымаць серверны апрацоўшчык у памяці і запускаць яго толькі пры спробе ўстаноўкі злучэння (карысна для эканоміі рэсурсаў на сістэмах распрацоўшчыкаў).

Крыніца: opennet.ru

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