Издание на релационно-графова СУБД 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 } );

В новата версия:

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

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster