Перший стабільний реліз реляційно-графової СУБД EdgeDB

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

Джерело: opennet.ru

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