Sortie du SGBD à graphe relationnel EdgeDB 2.0

La version du SGBD EdgeDB 2.0 est présentée, qui implémente le modèle de données de graphe relationnel et le langage de requête EdgeQL, optimisé pour travailler avec des données hiérarchiques complexes. Le code est écrit en Python et Rust (analyseur et parties critiques en termes de performances) et est distribué sous la licence Apache 2.0. Le projet est développé en tant que module complémentaire pour PostgreSQL. Les bibliothèques clientes sont préparées pour Python, Go, Rust et TypeScript/Javascript. Fournit des outils de ligne de commande pour la gestion du SGBD et l'exécution de requêtes interactives (REPL).

Au lieu d'un modèle de données basé sur des tables, EdgeDB utilise un système déclaratif basé sur les types d'objets. Au lieu de clés étrangères, la liaison par référence est utilisée pour définir la relation entre les types (un objet peut être utilisé comme propriété d'un autre objet).

tapez Person { nom de la propriété requis -> str; } tapez Movie { titre de propriété requis -> str; acteurs multi-liens -> Personne ; }

Les index peuvent être utilisés pour accélérer le traitement des requêtes. Des fonctionnalités telles que le typage de propriété fort, les restrictions de valeur de propriété, les propriétés calculées et les procédures stockées sont également prises en charge. Les fonctionnalités du schéma de stockage d'objets EdgeDB, qui rappelle quelque peu un ORM, incluent la possibilité de mélanger des schémas, de lier les propriétés de différents objets et la prise en charge JSON intégrée.

Des outils intégrés sont fournis pour stocker la migration de schéma - après avoir modifié le schéma spécifié dans un fichier esdl séparé, exécutez simplement la commande « edgedb migration create » et le SGBD analysera les différences dans le schéma et générera de manière interactive un script pour migrer vers le schéma. nouveau schéma. L’historique des modifications du schéma est automatiquement suivi.

Pour générer des requêtes, le langage de requête GraphQL et le langage propriétaire EdgeDB, qui est une adaptation de SQL pour les données hiérarchiques, sont pris en charge. Au lieu de listes, les résultats des requêtes sont formatés de manière structurée, et au lieu de sous-requêtes et de JOIN, vous pouvez spécifier une requête EdgeQL comme expression dans une autre requête. Les transactions et les cycles sont pris en charge.

sélectionnez le film { titre, acteurs : { nom } } filtre .titre = "The Matrix" insérez le film { titre := "Les résurrections matricielles", acteurs := ( sélectionnez le filtre de personne .nom dans { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } pour le nombre dans l'union {0, 1, 2, 3} ( select { number, number + 0.5 } );

Dans la nouvelle version:

  • Une interface Web intégrée a été ajoutée pour l'administration de la base de données, vous permettant d'afficher et de modifier les données, d'exécuter des requêtes EdgeQL et d'analyser le schéma de stockage utilisé. L'interface est lancée par la commande « edgedb ui », après quoi elle devient disponible lors de l'accès à localhost.
    Sortie du SGBD à graphe relationnel EdgeDB 2.0
  • L'expression « GROUP » a été implémentée, vous permettant de partitionner et d'agréger des données et de regrouper des données à l'aide d'expressions EdgeQL arbitraires, similaire au regroupement dans une opération SELECT.
  • Possibilité de contrôler l'accès au niveau de l'objet. Les règles d'accès sont définies au niveau du schéma de stockage et vous permettent de limiter la possibilité d'utiliser un certain ensemble d'objets dans les opérations d'extraction, d'insertion, de suppression et de mise à jour. Par exemple, vous pouvez ajouter une règle qui autorise uniquement l'auteur à mettre à jour une publication.
  • 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 se lier à l'utilisateur.
  • Ajout de la prise en charge des types qui définissent des plages de valeurs.
  • Une bibliothèque client officielle pour le langage Rust a été préparée.
  • Le protocole binaire EdgeDB a été stabilisé, permettant de traiter plusieurs sessions différentes simultanément au sein de la même connexion réseau, en transitant via HTTP, en utilisant des variables globales et des états locaux.
  • Ajout de la prise en charge de l'activation du socket, qui vous permet de ne pas conserver le gestionnaire de serveur en mémoire et de l'exécuter uniquement lorsque vous essayez d'établir une connexion (utile pour économiser des ressources sur les systèmes de développement).

Source: opennet.ru

Ajouter un commentaire