Lansarea graficului relațional DBMS EdgeDB 2.0

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

În loc de un model de date bazat pe tabel, EdgeDB utilizează un sistem declarativ bazat pe tipuri de obiecte. În loc de chei străine, legarea prin referință este folosită pentru a defini relația dintre tipuri (un obiect poate fi folosit ca proprietate a altui obiect).

type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }

Indecșii pot fi utilizați pentru a accelera procesarea interogărilor. Sunt acceptate și caracteristici precum tiparea puternică a proprietăților, restricțiile privind valoarea proprietății, proprietățile calculate și procedurile stocate. Caracteristicile schemei de stocare a obiectelor EdgeDB, care amintește oarecum de un ORM, includ capacitatea de a amesteca scheme, de a lega proprietăți de la diferite obiecte și suport JSON integrat.

Sunt furnizate instrumente încorporate pentru stocarea migrării schemei - după modificarea schemei specificate într-un fișier esdl separat, trebuie doar să rulați comanda „edgedb migration create” și DBMS va analiza diferențele dintre schemă și va genera interactiv un script pentru migrarea la schema noua. Istoricul modificărilor schemei este urmărit automat.

Pentru a genera interogări, sunt acceptate atât limbajul de interogare GraphQL, cât și limbajul proprietar EdgeDB, care este o adaptare a SQL pentru date ierarhice. În loc de liste, rezultatele interogării sunt formatate într-un mod structurat și, în loc de subinterogări și JOIN-uri, puteți specifica o interogare EdgeQL ca expresie în cadrul unei alte interogări. Tranzacțiile și ciclurile sunt acceptate.

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 } );

În noua versiune:

  • Добавлен встроенный web-интерфейс для администрирования БД, позволяющий просматривать и редактировать данные, выполнять запросы EdgeQL и анализировать применяемую схему хранения. Интерфейс запускается командой «edgedb ui», после выполнения которой становится доступен при обращении к localhost.
    Lansarea graficului relațional DBMS EdgeDB 2.0
  • Реализовано выражение «GROUP», позволяющее секционировать и агрегировать данные и выполнять группировку данных по произвольным выражениям EdgeQL по аналогии с группировкой в операции SELECT.
  • Возможность управления доступом на уровне объектов. Правила доступа определяются на уровне схемы хранения и позволяют ограничить возможность использования определённого набора объектов в операциях выборки, вставки, удаления и обновления. Например, можно добавить правило, разрешающее обновление публикации только автору.
  • Добавлена возможность использования глобальных переменных в схеме хранения. Для привязки к пользователю предложена новая глобальная переменная current_user.
  • Добавлена поддержка типов, определяющих диапазоны значений (range).
  • Подготовлена официальная клиентская библиотека для языка Rust.
  • Стабилизирован бинарный протокол EdgeDB, в котором появилась возможность обработки одновременно нескольких разных сеансов в рамках одного сетевого соединения, проброса через HTTP, использования глобальных переменных и локальных состояний.
  • Добавлена поддержка активации по сокету, позволяющая не держать серверный обработчик в памяти и запускать его только при попытке установки соединения (полезно для экономии ресурсов на системах разработчиков).

Sursa: opennet.ru

Adauga un comentariu