Пускането на релационно-графичната СУБД 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“ (на базата на имейл). Добавена е поддръжка за използване на платформите 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