Издание на релационно-графиска СУБД EdgeDB 5.0

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

Вместо модел на данните, базиран на таблици, в EdgeDB се използва декларативна система, основаваща се на обектни типове. Вместо външни ключове (foreign key) за определяне на връзките между типовете се използва свързване чрез референции (един обект може да бъде използван като свойство на друг обект).

type Person { required name: str; } type Movie { required title: str; multi 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’ } ) }

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

  • Добавена поддръжка на разклоняване (branching), позволяваща използването на концепцията за клонове при работа с данни и схеми, прилагана в системите за управление на версии. Вместо термина „база данни“ в новото издание е предложен терминът „клон“ (branch), а командите „create database“ и „drop database“ са обявени за остарели и вместо тях е препоръчано да се използват новите команди „create empty branch“ и „drop branch“. Освен празни клонове, с помощта на командите „create schema branch“ и „create data branch“ могат да се създават разклонения от съществуващи клонове и БД, копирайки от тях схемата на съхранение и данните.

    От практическа страна поддръжката на клонове позволява синхронизиране на данните с кода, използван за тяхната обработка, като същевременно запазва съвместимост със стария код. Например, след актуализация на кода може да се свърже нов клон с данни, отразяващ промените в схемата на съхранение. Обсъдената функционалност е удобна за опростяване на разработката и тестването на нови версии на софтуера, след което е достатъчно да се премине на вече тестван клон.

  • В разширението pgvector, използвано за ефективно съхранение и запитвания на вектори, е добавен нов тип индекси HNSW (Hierarchical Navigable Small Worlds), който, подобно на индекса IVFFlat, е наличен в три варианта: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip и ext::pgvector::hnsw_cosine. Освен това, в pgvector са разширени възможностите за прецизно настройване на индексите чрез обекта ext::pgvector::Config.
  • Добавени са допълнителни възможности за автентикация. В разширението auth е реализирана поддръжка на безпаролни схеми за автентикация WebAuthn (Passkeys) и „magic links“ (на база email). Добавена е поддръжка за използване на платформите Slack и Discord като OAuth доставчици.
  • Направени са оптимизации по производителността. В реализацията на кеша с резултатите от компилацията на запитвания е осигурено запазване на състоянието между рестартирания и е добавена автоматична прекомпилация след миграция. Увеличена е скоростта на работа с големи схеми за съхранение.
  • В езика за запитвания EdgeQL в израза „for“ е разрешено да не се посочва ключовото слово „union“ в основните запитвания, в които се използват изразите insert, update или delete.
  • Добавена е командата vacuum() за почистване, оптимизация и опаковане на съдържанието на БД.
  • Позволено преобразуването на данни между типа bytes и типовете int16, int32, int64 и uuid, използвайки функциите to_bytes(), to_uuid() и to_int*().
  • Добавена е възможността за затваряне на всички връзки към БД след изпълнението на операцията «drop database».

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

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