Недавно анонсирован выпуск СУБД «EdgeDB 2.0», который реализует реляционную модель данных реляционного графа и язык запросов EdgeQL, оптимизированный для работы со сложными иерархическими данными.
EdgeDB — это база данных с открытым исходным кодом, разработанная как духовный преемник SQL и реляционной парадигмы. Его цель — решить некоторые сложные проблемы проектирования, которые делают существующие базы данных излишне обременительными в использовании.
EdgeDB, работающий на основе механизма запросов Postgres, думает о схеме так же, как и вы: как об объектах со свойствами, связанными привязками. Это похоже на реляционную базу данных с объектно-ориентированной моделью данных или графовую базу данных со строгой схемой. Мы называем это реляционной базой данных графов.
О EdgeDB
Проект разрабатывается как плагин для PostgreSQL. Клиентские библиотеки подготовлены для языков Python, Go, Rust и TypeScript/Javascript.
Вместо табличной модели данных EdgeDB использует декларативную систему, основанную на типах объектов. Вместо внешних ключей (внешних ключей) для определения связи между типами используется ссылочная привязка (объект может использоваться как свойство другого объекта).
Индексы можно использовать для ускорения обработки запросов. Также поддерживаются такие функции, как строгая типизация свойств, ограничения значений свойств, вычисляемые свойства и хранимые процедуры. Некоторые функции схемы хранения объектов EdgeDB, чем-то напоминающие ORM, включают возможность смешивания схем, связывания свойств разных объектов и поддержку встроенного JSON.
Предусмотрены встроенные инструменты для миграции схема хранилища: после изменения схемы, указанной в отдельном файле esdl, просто запустите команду «edgedb migration create», и СУБД проанализирует различия в схеме и сгенерирует сценарий в интерактивном режиме. для перехода на новую схему. История изменений схемы отслеживается автоматически.
Для запросов как язык запросов GraphQL, так и как собственный язык EdgeDB, который представляет собой адаптацию SQL для иерархических данных. Вместо списков результаты запроса имеют структурированный формат, а вместо подзапросов и JOIN запрос EdgeQL может быть указан как выражение внутри другого запроса. Поддерживаются транзакции и циклы.
Основные новые функции EdgeDB 2.0
В новой версии, которая была представлена, добавлен интегрированный веб-интерфейс для администрирования базы данных позволяет просматривать и редактировать данные, выполнять запросы EdgeQL и проанализировать используемую схему хранения. Интерфейс запускается командой «edgedb ui», после чего он доступен при обращении к localhost.
Выражение «ГРУППА» была реализована, чтобы разрешить разделение и агрегацию данных. и группировка данных с использованием произвольных выражений EdgeQL, аналогичная группировке в операции SELECT.
Возможность управления доступом на уровне объекта, правила доступа определяются на уровне схемы хранилища и позволяют ограничить использование определенного набора объектов в операциях выбора, вставки, удаления и обновления. Например, вы можете добавить правило, которое позволяет только автору обновлять сообщение.
Также подчеркивается, что добавлена возможность использовать глобальные переменные в схеме хранения. Для привязки к пользователю предложена новая глобальная переменная.
Из других изменений, которые выделяются:
- Подготовлена официальная клиентская библиотека для языка Rust.
- Бинарный протокол EdgeDB стабилизирован, в нем появилась возможность одновременно обрабатывать несколько разных сессий в рамках одного сетевого подключения, пересылая по HTTP, используя глобальные переменные и локальные состояния.
- Добавлена поддержка типов, определяющих диапазоны значений (range).
- Добавлена поддержка активации сокета, что позволяет не держать драйвер сервера в памяти и запускать его только при попытке установить соединение (полезно для экономии ресурсов на системах разработки).
В конце концов для тех, кто хочет узнать об этом больше, они должны знать, что код написан на Python и Rust и выпущен под лицензией Apache 2.0.
Вы можете узнать больше об этом на по следующей ссылке.