İlişkisel grafik DBMS EdgeDB 2.0'ın piyasaya sürülmesi

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

EdgeDB, tablo tabanlı bir veri modeli yerine nesne türlerine dayalı bildirimsel bir sistem kullanır. Türler arasındaki ilişkiyi tanımlamak için yabancı anahtarlar yerine referansa göre bağlantı kullanılır (bir nesne başka bir nesnenin özelliği olarak kullanılabilir).

type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }

Sorgu işlemeyi hızlandırmak için dizinler kullanılabilir. Güçlü özellik yazma, özellik değeri kısıtlamaları, hesaplanan özellikler ve saklı prosedürler gibi özellikler de desteklenir. Bir şekilde ORM'yi anımsatan EdgeDB nesne depolama şemasının özellikleri arasında şemaları karıştırma yeteneği, farklı nesnelerden bağlantı özellikleri ve entegre JSON desteği yer alıyor.

Şema geçişini depolamak için yerleşik araçlar sağlanmıştır - ayrı bir esdl dosyasında belirtilen şemayı değiştirdikten sonra, sadece "edgedb migration create" komutunu çalıştırın; DBMS şemadaki farklılıkları analiz edecek ve etkileşimli olarak esdl dosyasına geçiş için bir komut dosyası oluşturacaktır. yeni şema. Şema değişikliklerinin geçmişi otomatik olarak izlenir.

Sorgu oluşturmak için hem GraphQL sorgu dili hem de hiyerarşik veriler için SQL'in uyarlanması olan özel EdgeDB dili desteklenir. Sorgu sonuçları, listeler yerine yapılandırılmış bir şekilde biçimlendirilir ve alt sorgular ve JOIN'ler yerine, bir EdgeQL sorgusunu başka bir sorgu içinde ifade olarak belirtebilirsiniz. İşlemler ve döngüler desteklenir.

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 } );

Yeni sürümde:

  • Добавлен встроенный web-интерфейс для администрирования БД, позволяющий просматривать и редактировать данные, выполнять запросы EdgeQL и анализировать применяемую схему хранения. Интерфейс запускается командой «edgedb ui», после выполнения которой становится доступен при обращении к localhost.
    İlişkisel grafik DBMS EdgeDB 2.0'ın piyasaya sürülmesi
  • Реализовано выражение «GROUP», позволяющее секционировать и агрегировать данные и выполнять группировку данных по произвольным выражениям EdgeQL по аналогии с группировкой в операции SELECT.
  • Возможность управления доступом на уровне объектов. Правила доступа определяются на уровне схемы хранения и позволяют ограничить возможность использования определённого набора объектов в операциях выборки, вставки, удаления и обновления. Например, можно добавить правило, разрешающее обновление публикации только автору.
  • Добавлена возможность использования глобальных переменных в схеме хранения. Для привязки к пользователю предложена новая глобальная переменная current_user.
  • Добавлена поддержка типов, определяющих диапазоны значений (range).
  • Подготовлена официальная клиентская библиотека для языка Rust.
  • Стабилизирован бинарный протокол EdgeDB, в котором появилась возможность обработки одновременно нескольких разных сеансов в рамках одного сетевого соединения, проброса через HTTP, использования глобальных переменных и локальных состояний.
  • Добавлена поддержка активации по сокету, позволяющая не держать серверный обработчик в памяти и запускать его только при попытке установки соединения (полезно для экономии ресурсов на системах разработчиков).

Kaynak: opennet.ru

Yorum ekle