The OpenNET Project / Index page

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

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

04.11.2023 19:37

Представлен релиз СУБД EdgeDB 4.0, реализующей реляционно-графовую модель данных и язык запросов EdgeQL, оптимизированные для работы со сложными иерархическими данными. Код написан на языках Python и Rust (парсер и критичные к производительности части) и распространяется под лицензией Apache 2.0. Проект развивается в форме надстройки над PostgreSQL. Клиентские библиотеки подготовлены для языков 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'
       }
     )
   }

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

  • Добавлена поддержка полнотекстового поиска, реализованная через подключаемый модуль fts. Для превращения любого объекта в доступный для поиска документ следует использовать индекс fts::index, а для поиска определённой фразе среди проиндексированных документов предложена функция fts::search(). Результаты возвращаются в форме кортежей, содержащих найденный объект и его поисковый вес. Например:
    
    
       type Item {
         required available: bool {
           default := false;
         };
         required name: str;
         required description: str;
    
         index fts::index on (
           fts::with_options(
             .name,
             language := fts::Language.eng
           )
         ); 
       }
    
    
       with res := (
         select fts::search(Item, 'candy corn', language := 'eng')
       )
       select res.object {name, score := res.score}
       order by res.score desc;
    
  • Добавлен новый тип данных "multirange", определяющий один или несколько диапазонов значений для представления прерывающихся интервалов. Нормализация перекрывающихся областей в заданных диапазонах осуществляется автоматически. С типом "multirange" могут работать все ранее доступные функции и операторы для обработки диапазонов.
    
       select multirange([range(8, 10)]) + range(1, 5) - range(3, 4);
    
  • Добавлена и включена по умолчанию поддержка аутентификации для ограничения доступа к GraphQL и EdgeQL поверх HTTP.
  • Для запуска сервиса аутентификации, функционирующего отдельно от экземпляра БД, добавлено расширение "auth", поддерживающее OAuth или вход по email и паролю.
  • Добавлено расширение pgcrypto, предоставляющее функции hmac, gen_salt и crypt для хэширования и шифрования.
    
       select ext::pgcrypto::digest('encrypt this', 'sha1');
    
  • Добавлено расширение pg_trgm c функциями для определения схожести строк.
  • Внесены оптимизации, позволившие повысить производительность. Потребление памяти на сервере снижено на 40%. Код парсера запросов EdgeQL переписан на языке Rust.
  • В язык EdgeQL добавлена поддержка более привычного синтаксиса условных выражений (if … then .. else …). Предоставлена возможность использования условных DML для создания, обновления и удаления разных объектов на основе заданных условий. Добавлены функции to_bytes(), to_str(), enc::base64_encode и enc::base64_decode. В триггерах разрешено использование выражения "when".
    
       select if count(Object) > 0 then 'got data' else 'no data';
    
       select (select User filter .name = 'Alice') ??
           (insert User { name := 'Alice' });
    
       select enc::base64_encode(b'hello');
    
  • Добавлен новый способ передачи глобальных значений в запросы GraphQL: вместо использования отдельного поля предоставлена возможность передачи переменных на основе объекта __globals__.

  1. Главная ссылка к новости (https://www.edgedb.com/blog/ed...)
  2. OpenNews: На конференции Google I/O представлена открытая графо-ориентированная СУБД Cayley
  3. OpenNews: Релиз СУБД Neo4j 1.3, ориентированной на хранение графов
  4. OpenNews: Новая версия СУБД ArangoDB 3.6
  5. OpenNews: Выпуск графо-ориентированной СУБД Nebula Graph 3.2
  6. OpenNews: Выпуск СУБД OrientDB 2.2
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60045-edgedb
Ключевые слова: edgedb, graph, database
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (42) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 20:04, 04/11/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

     ....ответы скрыты модератором (2)

  • 1.5, Аноним (4), 20:58, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Python это хорошо, но Rust всё портит!
     
     
  • 2.6, Аноним (6), 21:02, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Хочу СУБД написанную на шелле
     
     
  • 3.14, Аноним (14), 21:48, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Гуглить по join, split, grep, sort, cut, comm, uniq, csv.
     
     
  • 4.15, Аноним (6), 22:03, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Это читерство. Как минимум split, grep, sort, cut, uniq написаны на C.
     
     
  • 5.16, Tron is Whistling (?), 22:09, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Тот же bash внезапно тоже написан на C.
     
     
  • 6.23, Аноним (23), 22:15, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    тот же раст внезапно тоже, сколько бы фанатики ни повторяли себе, что он самокомпилируемый
     
     
  • 7.25, Аноним (6), 22:35, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да это ваще фейл. Безопасный язык с боров чекерами компилииуется с помощью llvm, написанным на дырявом C++. Вся безопасность пропадает.
     
     
  • 8.41, Вы забыли заполнить поле Name (?), 16:02, 05/11/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да какая разница, все это потом запускается на дырявом железе ... текст свёрнут, показать
     
  • 8.43, Аноним (43), 01:36, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да вы, батенька, Интеллектуал Т е в итоговой компильнутой раст-программе в п... текст свёрнут, показать
     
     
  • 9.44, Аноним (6), 03:24, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    llvm там не крутится, конечно же Но ведь по мнению растоманов С дырявый небез... текст свёрнут, показать
     
     
  • 10.49, Аноним (49), 20:44, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да так хитро при этом сломал, что все тесты проходят, а в проде валится Что-то ... текст свёрнут, показать
     
  • 5.17, Tron is Whistling (?), 22:09, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да и windows cmd...
     
  • 5.57, kusb (?), 18:47, 07/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Нам нужны эти утилиты переписанные на шелле.
     
  • 5.58, ptr (??), 01:10, 10/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Внезапно, почти все пакеты Python тоже написаны на C.
     

  • 1.9, Аноним (9), 21:09, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Красивое.
     
  • 1.12, Аноним (12), 21:34, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А какие преимущества в плане использования над классическими решениями?
     
     
  • 2.20, лютый арчешкольник... (?), 22:13, 04/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >А какие преимущества в плане использования над классическими решениями?

    классические это какие? нормальных гибридных баз нет ни одной. а neo4j + отдельная субд под данные - и так понятно в чем неудобство

     
     
  • 3.37, Вы забыли заполнить поле Name (?), 03:20, 05/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    В чем преимущество указанной гибридной бд, от, например, postgres?
     
     
  • 4.42, Аноним (49), 18:13, 05/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну попробуй на практике с графами в постгресе работать, быстро поймёшь чем преимущество любой граф-ориентированной базы перед реляционной.
     
     
  • 5.47, Вы забыли заполнить поле Name (?), 14:12, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ок. Где тут только в примерах графы я не увидел? Тут люди, фильмы и актеры. Кстати, разве для постгреса нет расширения для графов?
     
     
  • 6.50, Аноним (49), 20:47, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Ну не увидел, так не увидел. Человеку без воображения я помочь не могу ничем, прости, если сможешь.

    > для постгреса нет расширения для графов?

    Есть. Называется EdgeDB. Как раз вот вышла четвёртая весия, можешь почитать выше, целую новость написали на опеннете.

     
     
  • 7.51, Вы забыли заполнить поле Name (?), 21:01, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Ну не увидел, так не увидел. Человеку без воображения я помочь не
    > могу ничем, прости, если сможешь.

    Нет, такого сноба не прощу. Наслал на тебя китайское проклятие: тебя ждут большие проблемы в постели.

    >> для постгреса нет расширения для графов?
    > Есть. Называется EdgeDB. Как раз вот вышла четвёртая весия, можешь почитать выше,
    > целую новость написали на опеннете.

    У тебя рекурсивны случай без базового. Так ты упрешься в размер стека.

     
  • 7.59, ptr (??), 01:14, 10/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >> для постгреса нет расширения для графов?
    >Есть. Называется EdgeDB.

    Мда. Не верьте анонимам. Расширение для поддержки графов к PostgreSQL называется Apache AGE

     
  • 2.30, Аноним (30), 02:04, 05/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Модно.
     

  • 1.13, beck (??), 21:34, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хм...
    Очень любопытно.
     
  • 1.18, лютый арчешкольник... (?), 22:11, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Даже синтетического вымученного теста не выродили, где они "рвут" neo4j? Значит совсем плохо с производительностью....
     
  • 1.19, Аноним (19), 22:12, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Чем бы не тешилось лишь в прод не тащило.
     
  • 1.26, Аноним (26), 22:49, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем и для чего нужна эта питонрастическая обёртка над постгрёй?
     
     
  • 2.39, Вы забыли заполнить поле Name (?), 04:14, 05/11/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > питонрастическая

    Созвучно с одним словом. Хотя вообщем-то все сходится

     

  • 1.28, пишу со второго пня (?), 23:25, 04/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    кто то єтим реально пользуется?
     
  • 1.29, Аноним (30), 02:02, 05/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Powered by the Postgres query engine under the hood, EdgeDB thinks about schema the same way you do: as objects with properties connected by links. It's like a relational database with an object-oriented data model, or a graph database with strict schema. We call it a graph-relational database.

    Гибрид ежа с ужом в виде обертки поверх Postgres, но с новым модным названием. Есть желающие доверить свой бизнес этому?

     
     
  • 2.45, Golangdev (?), 03:35, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    TLDR: Посмотрел их сайт, списка партнёров, который обычно выкладывают, чтобы показать, что, типа, нам доверяют, нет.

    Да и стрёмно завязывать своё приложение на эту насадку.

    Если в том что PostgreSQL не умрёт можно не сомневаться, то жизнеспособность и будущее этого продукта вызывает вопросы.

    Что мы имеем в итоге ?

    * Насадка работающая поверх PostgreSQL
    * Красивый сайт, дизайн и фронтенд постарались на славу
    * Жёсткую завязку на версию PostgreSQL, похоже там и свободно апгрейдить нельзя
    * Отсутствие партнёров, списка того кто им доверяет свои данные
    * Меньшее сообщество чем PostgreSQL, MongoDB, если оно вообще есть
    * Лицензионное соглашение, текст из которого нельзя нормально выделить и скопировать
    * Компания EdgeDB, Inc из Калифорнии, которая ожидаемо не работает с российскими компаниями, а если вдруг у кого-то есть старый контракт - то все прелести от "надёжных" американских партнёров, такие как прекращение обслуживания, удаление ваших данных и т. д.

    Так что думаю - нет, желающих нет.

     
     
  • 3.46, Вы забыли заполнить поле Name (?), 14:09, 06/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну ещё автор с флажком в статусе. От таких лучше держаться подальше
     

  • 1.31, Аноним (30), 02:08, 05/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Ахахаха, всех развели как детей.

    Python
    93.7%

    Cython
    3.6%

    Rust
    2.6%

    https://github.com/edgedb/edgedb

     
  • 1.40, Аноним (40), 12:18, 05/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лицензия пермиссивная - минус.
     
  • 1.48, Аноним (48), 19:31, 06/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Использование Postgres и вообще реляционной модели в качестве бэкенда для сетевой модели --  очевидная глупость. Сетевые модели поверх RDBMS работают настолько медленно, что они бесполезны.
     
  • 1.52, Пряник (?), 10:04, 07/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем оно? Люди сидели, писали, днями и ночами и в итоге вместо решения реальной проблемы нам дают вымышленный пример. Лудше б ядро линукс пилили.
     
  • 1.53, mos87 (ok), 10:26, 07/11/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем это отличается от XML, или XML хранимого в ORDBMS?
     
     
  • 2.56, mos87 (ok), 15:09, 07/11/2023 [^] [^^] [^^^] [ответить]  
  • +/
    или json
     

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



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

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