Sortie de la base de données relationnelle-graphique EdgeDB 5.0

La version 5.0 de la base de données EdgeDB est maintenant disponible, mettant en œuvre un modèle de données relationnel-graphique et un langage de requête EdgeQL, optimisés pour travailler avec des données hiérarchiques complexes. Le projet se développe comme une surcouche à PostgreSQL, dont le code est écrit en Python et Rust (pour le parseur et les parties critiques en termes de performance), et est distribué sous la licence Apache 2.0. Des bibliothèques clientes sont disponibles pour les langages Python, Go, Rust, .NET, Elixir et TypeScript/Javascript. Un ensemble d'outils en 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 name: str; } type Movie { required title: str; multi actors: Person; }

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 prises en charge. Parmi les particularités du schéma de stockage objet d'EdgeDB, qui rappelle quelque peu l'ORM, on note la possibilité de mélanger des schémas, de lier des propriétés de différents objets et le support intégré de JSON. Pour accélérer le traitement des requêtes, des index peuvent être utilisés.

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.

Le langage de requêtes GraphQL et le langage propre à EdgeDB, qui est une adaptation de SQL pour les données hiérarchiques, sont pris en charge pour la formulation des requêtes. Au lieu de listes, les résultats des requêtes sont présentés sous forme structurée, et au lieu de sous-requêtes et d'opérations JOIN, il est possible d'indiquer une seule requête EdgeQL comme expression à l'intérieur d'une autre requête. Les transactions et les boucles sont également prises en charge.

sélectionnez Movie { titre, acteurs: { nom } } filtre .titre = «The Matrix» insérer Movie { titre := «The Matrix Resurrections», acteurs := ( sélectionner Personne filtre .nom dans { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }

Dans la nouvelle version :

  • Le support de la bifurcation (« branching ») a été ajouté, permettant d'utiliser le concept de branches lors de la manipulation des données et des schémas, comme dans les systèmes de gestion de versions. Dans cette nouvelle version, plutôt que d'utiliser le terme « base de données », le concept de « branche » (branch) est proposé, et les commandes « create database » et « drop database » sont déclarées obsolètes ; il est recommandé d'utiliser les nouvelles commandes « create empty branch » et « drop branch ». En plus des branches vides, les commandes « create schema branch » et « create data branch » permettent de créer des ramifications à partir de branches et de bases de données existantes, en copiant leur schéma de stockage et leurs données.

    Du point de vue pratique, le support des branches permet de synchroniser les données avec le code utilisé pour leur traitement, tout en maintenant la compatibilité avec l'ancien code. Par exemple, après avoir mis à jour le code, on peut lier une nouvelle branche de données qui prend en compte les modifications de schéma de stockage apportées au code. Cette fonctionnalité est pratique pour simplifier le développement et les tests des nouvelles versions du logiciel, après quoi il suffit de passer à la branche déjà testée.

  • L'extension pgvector, utilisée pour le stockage et la requête efficaces de vecteurs, a ajouté un nouveau type d'index HNSW (Hierarchical Navigable Small Worlds), qui, à l'instar de l'index IVFFlat, est disponible en trois variantes : ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip et ext::pgvector::hnsw_cosine. De plus, les fonctionnalités de configuration fine des index ont été étendues via l'objet ext::pgvector::Config.
  • De nouvelles possibilités d'authentification ont été ajoutées. L'extension auth prend en charge les schémas d'authentification sans mot de passe WebAuthn (Passkeys) et les « magic links » (basés sur l'email). La prise en charge de l'utilisation des plateformes Slack et Discord en tant que fournisseurs OAuth a également été ajoutée.
  • Des optimisations de performance ont été mises en œuvre. Dans la mise en œuvre du cache des résultats de compilation des requêtes, l'état est maintenu entre les redémarrages et une recompilation automatique a été ajoutée après la migration. La vitesse de traitement des grands schémas de stockage a été augmentée.
  • Dans le langage de requête EdgeQL, il est maintenant permis de ne pas spécifier le mot-clé « union » dans les requêtes de base utilisant les expressions insert, update ou delete.
  • Une commande vacuum() a été ajoutée pour nettoyer, optimiser et empaqueter le contenu de la base de données.
  • La conversion de données entre le type bytes et les types int16, int32, int64 et uuid est autorisée, en utilisant les fonctions to_bytes(), to_uuid() et to_int*().
  • La possibilité de fermer toutes les connexions à la base de données après la réalisation de l'opération « drop database » a été ajoutée.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster