Випуск реляційно-графової СУБД EdgeDB 2.0

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

Замість моделі даних на основі таблиць EdgeDB застосовується декларативна система на основі об'єктних типів. Замість зовнішніх ключів (foreign key) визначення зв'язку між типами застосовується зв'язування посиланнями (один об'єкт може використовуватися як властивість іншого об'єкта).

type Person { required property name -> 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

Додати коментар або відгук