Le lancement de la base de donnĂ©es EdgeDB 2.0 a Ă©tĂ© annoncĂ©, mettant en Ćuvre un modĂšle de donnĂ©es relationnel et graphique ainsi qu'un langage de requĂȘtes EdgeQL, optimisĂ©s pour travailler avec des donnĂ©es hiĂ©rarchiques complexes. Le code est Ă©crit en Python et Rust (pour le parser et les parties critiques en matiĂšre de performance) et est distribuĂ© sous la licence Apache 2.0. Le projet Ă©volue sous la forme d'une extension de PostgreSQL. Des bibliothĂšques clientes sont disponibles pour les langages Python, Go, Rust et TypeScript/Javascript. Un outil de ligne de commande est fourni pour gĂ©rer la base de donnĂ©es et exĂ©cuter des requĂȘtes de maniĂšre interactive (REPL).
EdgeDB utilise une approche dĂ©clarative basĂ©e sur des types d'objets plutĂŽt qu'un modĂšle de donnĂ©es basĂ© sur des tableaux. Au lieu de clĂ©s Ă©trangĂšres (foreign key) pour dĂ©finir les relations entre les types, un systĂšme de liaison par rĂ©fĂ©rences est utilisĂ© (un objet peut ĂȘtre employĂ© comme propriĂ©tĂ© d'un autre objet).
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Pour accĂ©lĂ©rer le traitement des requĂȘtes, des index peuvent ĂȘtre utilisĂ©s. Des fonctionnalitĂ©s telles que la typage strict des propriĂ©tĂ©s, les contraintes de valeurs des propriĂ©tĂ©s, les propriĂ©tĂ©s calculĂ©es et les procĂ©dures stockĂ©es sont Ă©galement supportĂ©es. Parmi les caractĂ©ristiques du schĂ©ma de stockage orientĂ© objet d'EdgeDB, qui rappelle quelque peu les ORM, on note la possibilitĂ© de mĂ©langer les schĂ©mas, de lier des propriĂ©tĂ©s provenant de diffĂ©rents objets et le support intĂ©grĂ© de JSON.
Des outils intĂ©grĂ©s pour la migration du schĂ©ma de stockage sont fournis â aprĂšs modification du schĂ©ma, spĂ©cifiĂ© dans un fichier esdl sĂ©parĂ©, il suffit d'exĂ©cuter la commande « edgedb migration create » et la base de donnĂ©es analysera les diffĂ©rences de schĂ©ma et gĂ©nĂ©rera de maniĂšre interactive un script pour passer au nouveau schĂ©ma. L'historique des modifications de schĂ©ma est automatiquement suivi.
Pour la crĂ©ation de requĂȘtes, le langage de requĂȘte GraphQL ainsi que le langage propre Ă EdgeDB, qui est une adaptation de SQL pour les donnĂ©es hiĂ©rarchiques, sont supportĂ©s. Au lieu de listes, les rĂ©sultats de la requĂȘte sont formatĂ©s de maniĂšre structurĂ©e, et au lieu de sous-requĂȘtes et d'opĂ©rations JOIN, il est possible d'indiquer une requĂȘte EdgeQL en tant qu'expression au sein d'une autre requĂȘte. Les transactions et les boucles sont pris en charge.
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 } );
Dans la nouvelle version :
- Une interface web intĂ©grĂ©e pour l'administration de la base de donnĂ©es a Ă©tĂ© ajoutĂ©e, permettant de visualiser et d'Ă©diter les donnĂ©es, d'exĂ©cuter des requĂȘtes EdgeQL et d'analyser le schĂ©ma de stockage appliquĂ©. L'interface se lance avec la commande «edgedb ui», aprĂšs quoi elle est accessible via localhost.

- La fonction «GROUP» a été implémentée, permettant de partitionner et d'agréger des données ainsi que d'effectuer des regroupements de données selon des expressions EdgeQL arbitraires, similaire au regroupement dans l'opération SELECT.
- Gestion des accÚs au niveau des objets. Les rÚgles d'accÚs sont définies au niveau du schéma de stockage et permettent de limiter l'utilisation d'un ensemble spécifique d'objets dans les opérations de sélection, d'insertion, de suppression et de mise à jour. Par exemple, une rÚgle peut autoriser la mise à jour d'un article uniquement par son auteur.
- Ajout de la possibilité d'utiliser des variables globales dans le schéma de stockage. Une nouvelle variable globale current_user a été proposée pour lier à l'utilisateur.
- Ajout de la prise en charge des types définissant des plages de valeurs (range).
- Une bibliothÚque cliente officielle pour le langage Rust a été préparée.
- Le protocole binaire EdgeDB a été stabilisé, permettant la gestion simultanée de plusieurs sessions différentes au sein d'une seule connexion réseau, le passage via HTTP, l'utilisation de variables globales et d'états locaux.
- Ajout du support de l'activation par socket, permettant de ne pas garder le traitement du serveur en mémoire et de ne l'exécuter que lors de la tentative d'établissement d'une connexion (utile pour économiser des ressources sur les systÚmes des développeurs).
Source : opennet.ru

