The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск реляционно-графовой СУБД EdgeDB 2.0

29.07.2022 14:47

Представлен релиз СУБД 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 }
   );

В новой версии:

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


  1. Главная ссылка к новости (https://www.edgedb.com/blog/ed...)
  2. OpenNews: Для PostgreSQL подготовлено дополнение AGE для хранения данных в форме графа
  3. OpenNews: Компания Alibaba открыла код распределённой СУБД PolarDB, основанной на PostgreSQL
  4. OpenNews: Выпуск СУБД Tarantool 2.8
  5. OpenNews: Выпуск FerretDB 0.3, реализации MongoDB на базе СУБД PostgreSQL
  6. OpenNews: Выпуск графо-ориентированной СУБД Nebula Graph 3.2
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57572-edgedb
Ключевые слова: edgedb, database, graph
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (49) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 16:05, 29/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Создали мутный ORM для постгреса, но пишут что это мегановая DB. Смузики опять веселятся.  
     
     
  • 2.16, Аноним (16), 18:06, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Где пишут? На оф сайте сразу написано, что query engine постгресовый.
     
     
  • 3.19, tty0 (?), 18:51, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Успокойтесь и кушайте

    >>> Реализовано выражение "GROUP"

    И чего там ещё не реализовано... Но зовут это СУБД

     
     
  • 4.39, Аноним (39), 10:31, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты точно туда отвечаешь?
     
  • 2.20, YetAnotherOnanym (ok), 19:50, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Фи, какой примитивный AI. О таком ещё Салтыков-Щедрин писал, модель называлась "Органчик". Только там на все случаи была фраза "Не потерплю!", а здесь "Где пруфы?".
     
     
  • 3.47, MadAdmin (?), 06:35, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы не правы, там вроде ещё были фразы "Ррразорю!" и "Запорю!".
    Очень  развитый был AI,  Салтыков-Щедрин надолго опередил своё время и 'посмотрел в завтрашний день'
     
     
  • 4.48, YetAnotherOnanym (ok), 08:18, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Хммм... Надо бы перечитать.
     

  • 1.3, Anonima (?), 16:13, 29/07/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     

     ....ответы скрыты (4)

  • 1.6, Аноним (-), 16:22, 29/07/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –2 +/
     

  • 1.10, Урри (ok), 16:29, 29/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Я чет не понял - на гитхабе в подпапочке "postgres" сплошняком сишный код. а в подпапочке edb - питончиковый. А где безопасТность то, нас что, снова нае ой, обманули?

    О, нашел. В edb/edgeql-parser/src/ 9 файлов! Фух, успокоили. Можно срочно переходить.

    https://github.com/edgedb/edgedb

     
     
  • 2.11, Аноним (4), 16:41, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не знаю куда ты там смотрел, но правильные цифры они на виду:

    Languages

    Python 94.0%
    Cython 3.6%
    Rust 2.3%
    Other 0.1%

     
     
  • 3.18, abi (?), 18:31, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как видно, в проекте негусто критичных к производительности частей
     
     
  • 4.21, Аноним (21), 22:43, 29/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Общеизвестно ведь, что 1 строчка кода на расте добавляет 10% к безопасности в 100% к производительности любого проекта. А их там целые 2000, можешь сам посчитать, насколько это полезно.
     
     
  • 5.30, Аноним (30), 08:11, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Кому общеизвестно? Расто-веб-макака формошлепам страдающим от синдрома Даннинга — Крюгера?
     
     
  • 6.33, Admino (ok), 13:00, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Экспертам с опеннета.
     
  • 6.40, Аноним (39), 10:33, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ух ты, говорящий унитаз
     
     
  • 7.44, Аноним (44), 22:04, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо мы это про тебя итак всегда знали.  
     
  • 4.26, Онанистмус (?), 04:11, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На одном и том же пк Postgres дает 5 млн RPS а EdgeDB 100 тыс RPS. Это все что нужно знать о данной БД.
     
     
  • 5.28, Аноним (28), 05:24, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ты уверен что ты делал одинаковое сравнение?)))

    Наверное ты просто забыл join-ы к Postgres добавить;))

    По сути EdgeDB это просто транслятор в схему postgres и sql.

    И совершенно непонятно как она может быть медленнее.

     
     
  • 6.29, Онанистмус (?), 06:59, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Все очень просто. У EdgeDB фронт энд, который принимает запросы и меняет edgedb запросы на SQL запросы, написан на python и он режет потенциал postgres в 50 раз.
     
  • 5.35, funny.falcon (?), 22:57, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ни хрена у тебя железяка. Я тестировал толстые сервера, но не видел больше 3млн RPS
     
  • 5.36, Аноним (36), 03:00, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Сравнивать нужно с ормами.
    Напиши ссылку на код, которым тестировал
     
     
  • 6.37, Аноним (37), 08:34, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если это орм почему он называется DB? Жду развернутого объяснения.  
     
     
  • 7.41, Аноним (39), 10:43, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потому что это не ОРМ.
     
     
  • 8.43, Аноним (44), 22:02, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зачем его тогда сравнивать с ормами Давай тренируй логику у тебя может получитс... текст свёрнут, показать
     
  • 7.52, pentagon128 (?), 16:52, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это ОРМ на стороне сервера
     
  • 5.49, лютый жжжжж (?), 12:44, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Postgres дает 5 млн RPS

    ох уж эти сказочники )

     
     
  • 6.51, Онанистмус (?), 12:49, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    pgbench
     
  • 2.31, Аноним (30), 08:15, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что ещё ожидать от страдающих от синдрома Даннинга — Крюгера растоманов
     

  • 1.13, Аноним (28), 17:30, 29/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Эксперты даже потроллить нормально не могут.
     
  • 1.14, Аноним (16), 17:48, 29/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Чего только не сделают, лишь бы Oracle не использовать.
     
  • 1.15, Аноним (36), 17:51, 29/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Раз в 10 быстрее призмы на легких запросах в бд
     
  • 1.22, Аноним (22), 23:21, 29/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Интересная мода пошла. Писать какую-то фигню в красивой обёртке. А вопросы надёжности и производительности - это не к авторам....
     
     
  • 2.34, Admino (ok), 13:01, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Моде на красивые обёртки лет 25 точно, а то и больше. Ты что-то проспал.

    Вопросы надёжности и производительности точно не к авторам обёртки.

     
  • 2.42, Аноним (39), 10:44, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Почему не к авторам? Делай пуш-реквест.
     
  • 2.45, Alex5Anc (ok), 04:56, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Интересная мода пошла. Писать какую-то фигню в красивой обёртке. А вопросы надёжности и производительности - это не к авторам....

    + три чая этому анониму!

     

  • 1.23, Аноним (23), 01:29, 30/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Графы хранить на технологиях реляционных БД? Совсем больные что ли
     
     
  • 2.24, Аноним (28), 03:41, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это не графы а, скорее 🌲. По сути это обычные реляционные бд с join-ами чтобы собрать сложные объекты.

    Только с нормальным синтаксисом.

     
     
  • 3.32, Аноним (32), 09:57, 30/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я про то, что иерархические данные хранить в БД реляционной в принципе больно. Получается либо дёшево по селектам и дорого по инсертам, либо наоборот. В большинстве случаев пользуются либо рекурсивными CTE, либо nested sets, либо materialized path. И во всех случаях приходится выбирать трейд-оф с которым можно смириться в рамках требований. А если в Neo4J запихать все, то все более-менее шустро работает.
     
     
  • 4.38, Аноним (37), 08:37, 31/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А что делать тем у кого легаси? Сразу сказать что графы это не для нас?
     
  • 4.46, Alex5Anc (ok), 05:01, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Я про то, что иерархические данные хранить в БД реляционной в принципе больно.

    Зависит от "приготовления".  Можно "упоротца", а можно найти "золотую середину".

     
  • 3.50, лютый жжжжж (?), 12:47, 01/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Это не графы

    это г-но... в neo4j связи траверсятся напрямую (т.е. быстрее, чем индексы). и cypher уже есть с кучей док и книг.

    не понимаю, зачем в 2022 делать субд заведомо медленнее чем лидер (написанный на безопасной дзявке кстати)  

     

  • 1.53, pentagon128 (?), 17:08, 02/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а мне нраицца, надо будет пощупать
     
  • 1.54, Аноним (54), 20:21, 11/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо, скачал)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру