Firefox a intégré la possibilité d'extraire des paramÚtres de suivi des URL

La sortie de la base de donnĂ©es EdgeDB 4.0 a Ă©tĂ© annoncĂ©e, mettant en Ɠuvre un modĂšle de donnĂ©es relationnel et graphique ainsi qu'un langage de requĂȘte EdgeQL, optimisĂ©s pour le traitement de donnĂ©es hiĂ©rarchiques complexes. 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. Le projet Ă©volue sous la forme d'une extension de PostgreSQL. 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; }

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.

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 :

  • Ajout de la prise en charge de la recherche textuelle complĂšte, mise en Ɠuvre via un module plug-in fts. Pour transformer n'importe quel objet en document accessible Ă  la recherche, il convient d'utiliser l'index fts::index, et pour rechercher une certaine phrase parmi les documents indexĂ©s, la fonction fts::search() a Ă©tĂ© proposĂ©e. Les rĂ©sultats sont renvoyĂ©s sous la forme de tuples, contenant l'objet trouvĂ© et son poids de recherche. Par exemple : type Item { requis disponible: bool { dĂ©faut := faux; }; requis nom: str; requis description: str; index fts::index sur ( fts::with_options( .nom, langue := fts::Language.eng ) ); } avec res := ( sĂ©lectionner fts::search(Item, ‘candy corn’, langue := ‘eng’) ) sĂ©lectionner res.object {nom, score := res.score} commander par res.score desc;
  • Ajout d'un nouveau type de donnĂ©es «multirange», dĂ©finissant une ou plusieurs plages de valeurs pour reprĂ©senter des intervalles discontinus. La normalisation des zones de chevauchement dans les plages dĂ©finies est effectuĂ©e automatiquement. Le type «multirange» peut fonctionner avec toutes les fonctions et opĂ©rateurs prĂ©cĂ©demment disponibles pour le traitement des plages. sĂ©lectionner multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Ajout et activation par dĂ©faut de la prise en charge de l'authentification pour limiter l'accĂšs Ă  GraphQL et EdgeQL sur HTTP.
  • Pour dĂ©marrer le service d'authentification, fonctionnant sĂ©parĂ©ment de l'instance de la base de donnĂ©es, une extension «auth» a Ă©tĂ© ajoutĂ©e, prenant en charge OAuth ou la connexion par e-mail et mot de passe.
  • Ajout de l'extension pgcrypto, fournissant des fonctions hmac, gen_salt et crypt pour le hachage et le chiffrement. sĂ©lectionner ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Ajout de l'extension pg_trgm avec des fonctions pour dĂ©terminer la similaritĂ© des chaĂźnes.
  • Des optimisations ont Ă©tĂ© apportĂ©es, permettant d'amĂ©liorer les performances. La consommation de mĂ©moire a Ă©tĂ© le serveur rĂ©duite de 40%. Le code du parseur de requĂȘtes EdgeQL a Ă©tĂ© réécrit en langage Rust.
  • Le langage EdgeQL a ajoutĂ© la prise en charge d'une syntaxe d'expressions conditionnelles plus familiĂšre (if 
 then .. else 
). Il est dĂ©sormais possible d'utiliser des DML conditionnels pour crĂ©er, mettre Ă  jour et supprimer diffĂ©rents objets en fonction de conditions spĂ©cifiĂ©es. Les fonctions to_bytes(), to_str(), enc::base64_encode et enc::base64_decode ont Ă©tĂ© ajoutĂ©es. L'utilisation de l'expression « when » est autorisĂ©e dans les dĂ©clencheurs. 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');
  • Un nouveau moyen de transmettre des valeurs globales dans les requĂȘtes GraphQL a Ă©tĂ© ajoutĂ© — plutĂŽt que d'utiliser un champ sĂ©parĂ©, il est dĂ©sormais possible de transmettre des variables basĂ©es sur l'objet __globals__.

    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