Base de données orientée graphe : Neo, puissance 4

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
118
Mois de parution
février 2022
Spécialité(s)


Résumé

Il ne sera pas question du nouvel opus de la matrice ici, mais de Neo4j qui revient encore plus fort dans sa version 4.Dans de précédents numéros (voir [2] et [3]), je vous ai présenté les BDDDTG (les bases de données de type graphe), et plus spécifiquement Neo4j [1]. L’acronyme est de moi, les trois derniers caractères me rappelleront toujours l’effet produit par la découverte des graphes après des années d’utilisation de bases dites relationnelles.


Body

Neo4j, Neo et moi c’est une longue histoire. Une veille technologique qui amène une découverte, qui amène des joies, des rencontres, une fierté (un livre, voir [4]). Ah, les graphes ! Avec eux, on se sépare des tables de jointures, fini le passage du modèle conceptuel au modèle physique.Neo4j, c’est la convivialité, on fait des ronds et des flèches au tableau et l’on y réfléchit entre collègues...

Cette nouvelle version majeure apporte son lot de nouveautés, de nouveaux produits que nous allons découvrir, et nous verrons aussi que Neo4j monte en charge.

1. Champion du monde !

Il faut lire ce titre à la façon de José Garcia avec son accent du Sentier. Neo4j a créé le marché des BDDDTG et en est le leader. C’est factuel.Le marché est en expansion continue, avec Neo4j présent dans l’immense majorité des plus grosses entreprises mondiales (>75 % du Fortune100). Les graphes ne sont plus un marché de niche.La société Neo4j est désormais valorisée à 2 milliards de dollars.Fermons cet aspect financier pour revenir au technique.Une des choses régulièrement entendues sur Neo4j est que cela ne « scale » pas, que cela ne monte pas en charge. Ce qui était, est (et sera) faux. Lors de la dernière conférence Nodes 2021, l’équipe de Neo4j a présenté une démo illustrant cette capacité de montée en charge. Avec rien de moins qu’une application de réseau social au-dessus d’un graphe de non pas un, ni deux, mais trois milliards de nœuds ! Soit plus que le réseau « VisageLivre » (2,7 milliards).Qui dit trois milliards de nœuds dans un réseau dit encore plus de relations. Bien plus.Plus d’un trillion (mille milliards) de relations. Et tout cela dans le Cloud, avec seulement 1000 serveurs dans les nuages.Et l’application répond en moins de 20 ms. Des magiciens ! La vidéo est disponible en ligne [5].

Tout le logiciel créé pour cette démo est public. Vous pouvez donc « jouer » à refaire cette démo.À ne pas reproduire sans un solide compte en banque, car évidemment, initialiser une telle base consomme du temps CPU. La magie a toujours un prix.

Le but de cette démonstration aura aussi été de mettre en lumière un nouveau produit : Aura.

2. Aura

Ce mot qui nous rappelle le Cycle de Fondation d’Isaac Asimov est le nom choisi pour un nouveau produit de Neo4j.

Il s’agit d’une version hébergée et managée pour vous dans un nuage (GCP, AWS).Du point de vue du client (vous), pas d’administration à gérer, pas d’interruption de service à prévoir.C’est l’illumination par les graphes.

Que demander de plus ?Que cela soit... quoi ? Qu’entends-je ? Gratuit !?!?!? Vous abusez ! Alors OUI et NON puisque oui il y a « Aura Free » qui vous permettra d’avoir VOTRE graphe dans le Cloud sans même à faire chauffer une carte de crédit. Il s’agit de l’habituel concept de « Free Tier » que pas mal d’éditeurs proposent. Voilà pour l’aspect OUI.

Pour l’aspect NON, les limites (50 000 nœuds et 175 000 relations) font que vous n’y mettrez pas un projet d’entreprise.Saluons tout de même que cette possibilité soit offerte et que cela permette de tester avant de signer.

3. Developer Tools

Cette appellation regroupe deux produits.Premièrement, le Neo4j Browser qui est une interface permettant d’interagir avec le graphe.Je rappelle que c’est un outil à destination des administrateurs et développeurs.C’est l’application web qui est fournie et lancée avec le serveur Neo4j. Elle reste disponible sur le même port 7474 qu’au préalable.Elle a évolué avec quelques changements, comme l’amélioration de l’autocomplétion avec un nouvel éditeur de Cypher (le langage de requêtage), des modifications esthétiques pour suivre les changements dans l’identité visuelle de Neo4j, les résultats rejouables, l’amélioration de la gestion des favoris et bien entendu, des correctifs.Deuxième produit, Neo4j Desktop, une application en mode client lourd qui va vous faciliter la vie sur vos postes de développement. Passer facilement d’une base à l’autre, avoir plusieurs versions de Neo4j sur sa machine, télécharger Java si nécessaire, télécharger les plugins d’un clic, lancer une fenêtre de Neo4j Browser d’un clic...

Un outil bien agréable, même pour quelqu’un qui n’est généralement pas fan des « clickodromes ».

4. Nouveautés

4.1 E pluribus unum (de plusieurs, un)

Parmi les améliorations de cette version 4, nous avons les bases multiples, c’est-à-dire plusieurs graphes différenciés, mais utilisables en même temps (avec un seul serveur ou cluster).On abuse souvent des termes dans notre métier et l’on parle de base en lieu est place de SGBDR.Donc pour faire un parallèle avec le monde SQL, c’est comparable aux schémas dans PostgreSQL.Nous avons désormais la possibilité d’avoir plusieurs graphes, ce qui n’empêche pas de mettre toutes ses données dans le même, si le cœur vous en dit. Un avantage, c’est de permettre la segmentation. Cela peut être une obligation légale.Imaginons que nous ayons des données de référence provenant d’un système maître distant et que les données locales doivent être remplacées régulièrement avec les données distantes. On pourra mettre à jour ce graphe sans peur d’impacter d’autres données.

4.1.1 Démonstration

Dans Neo4j Desktop, je vous invite à créer une nouvelle base GLMF (bouton Add). Ne la démarrez pas encore. Ensuite, cliquez sur le bouton aux trois points, puis Settings. Cela va ouvrir le fichier de configuration auquel vous ajouterez le bloc suivant :

fabric.database.name=fabric
fabric.graph.0.uri=neo4j://localhost:7687
fabric.graph.0.database=neo4j
fabric.graph.0.name=neo4j
 
fabric.graph.1.uri=neo4j://localhost:7687
fabric.graph.1.database=linuxmag1
fabric.graph.1.name=linuxmag1
 
fabric.graph.2.uri=neo4j://localhost:7687
fabric.graph.2.database=linuxmag2
fabric.graph.2.name=linuxmag2
 
fabric.graph.3.uri=neo4j://localhost:7687
fabric.graph.3.database=linuxmag3
fabric.graph.3.name=linuxmag3

Ce qui va nous permettre de créer une base virtuelle de type Fabric. Elle unifie différentes sous-bases qui ici seront aussi dans votre graphe GLMF, mais si le cœur vous en dit, cela fonctionne aussi dans Docker et en distant.

Démarrez votre graphe GLMF. Ouvrez le browser.Dans le premier onglet Database Information, vous verrez une liste déroulante qui vous permet de choisir quelle base utiliser. Restez sur le choix neo4j pour le moment, puis exécutez ce code pour créer les sous-parties de fabric.

CREATE OR REPLACE DATABASE linuxmag1;
CREATE OR REPLACE DATABASE linuxmag2;
CREATE OR REPLACE DATABASE linuxmag3;

Puis nous allons écrire dans chaque « bout du tissu », ou morceau de fabric.

USE linuxmag1CREATE (a:Etiquette1 {lid: 0, prop1:1}) ;
USE linuxmag2
CREATE (b:Etiquette2 {lid: 0, prop2:2}) ;
USE linuxmag3
CREATE (c:Etiquette3 {lid: 0, prop3:3}) ;

Vous pouvez désormais sélectionner fabric dans la liste déroulante.Nous allons exécuter une requête UNION qui retournera les résultats issus des trois parties.Voici les instructions à exécuter :

USE fabric.linuxmag1
MATCH (a:Etiquette1)
WHERE a.lid = 0
RETURN a.prop1 AS col
UNION
USE fabric.linuxmag2
MATCH (a:Etiquette2)
WHERE a.lid = 0
RETURN a.prop2 AS col
UNION
USE fabric.linuxmag3
MATCH (a:Etiquette3)
WHERE a.lid = 0
RETURN a.prop3 AS col

Il n’est pas possible (pour le moment ?) de faire des requêtes sur plusieurs bases en même temps. Un moyen de s’en approcher est d’utiliser des sous-requêtes.

Imaginons deux bases : clients et commandes.Pour obtenir la liste des commandes d’un client dont on a le nom et prénom, on cherchera son idClients dans la base clients, puis on en utilisera la valeur dans la base commandes.

4.2 Sécurité granulaire

Afin de contrôler finement les autorisations d’accès, il est possible de créer des rôles que l’on pourra attribuer à des utilisateurs.

Voici quelques commandes :

  • Créer un utilisateur : CREATE USER jerome SET PASSWORD ‘chocolat’ CHANGE NOT REQUIRED.
  • Créer un rôle : CREATE ROLE morpheus.
  • Attribuer un rôle : GRANT ROLE morpheus TO jerome.

Il devient possible d’autoriser/refuser :

  • l’accès à tout un graphe ;
  • le parcours d’un graphe ;
  • la lecture/écriture de propriétés ;
  • la manipulation d’étiquettes ;
  • la gestion des contraintes ;
  • la gestion des index ;
  • la gestion des rôles.

4.1.2 Scalabilité « illimitée »

Par illimitée, nous nous comprenons, nous restons dans un univers limité en ressources matérielles.

Cette scalabilité, vous l’avez compris, peut se faire au sein de plusieurs datacenters répartis sur les différents continents.Si vous y mettez le prix, vous pouvez louer plus de machines pour servir une infinité de clients.À bon entendeur, la valeur haute du maximum est estimée à 7,5 milliards d’utilisateurs. Sans les bots.

Conclusion

Cette nouvelle version majeure de Neo4j apporte des nouveautés très intéressantes, notamment en ce qui concerne les accès, de par une granularité très fine. Outre la nouvelle identité visuelle, de nombreuses améliorations moins visibles amènent encore plus de performance et ainsi, plus de « developer joy ».

Références

[1] Site officiel de Neo4j : http://www.neo4j.com

[2] J. BATON, « Neo4j, une base NoSQL orientée graphe », GNU/Linux Magazine n°174, août 2014 :
https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-174/neo4j-une-base-nosql-orientee-graphe

[3] J. BATON, « Mettre la France dans Neo4j », GNU/Linux Magazine n°187, novembre 2015 :
https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-187/mettre-la-france-dans-neo4j

[4] J. BATON J. et R. VAN BRUGGEN, « Learning Neo4j 3,x - Second Edition », Packt Publishing, 2017 :
https://www.packtpub.com/product/learning-neo4j-3-x-second-edition/9781786466143

[5] Neo4j NODES 2021 Opening Keynote - A Blueprint for Success by Emil Eifrem :
https://www.youtube.com/watch?v=4ZCs83_iHU8



Article rédigé par

Par le(s) même(s) auteur(s)

Mettre la France dans Neo4j

Magazine
Marque
GNU/Linux Magazine
Numéro
187
Mois de parution
novembre 2015
Spécialité(s)
Résumé

Ceci n'est pas un atelier de nœuds marins pour vos vacances en bord de mer. Souvenez-vous, dans Neo4j, tout est nœuds, relations et propriétés. Nous allons utiliser des données libres pour créer un système de géolocalisation et de reverse-géolocalisation pour le territoire français.

Les addons, c'est sa Forge

Magazine
Marque
GNU/Linux Magazine
Numéro
186
Mois de parution
octobre 2015
Spécialité(s)
Résumé
Dans cet article, nous allons apprendre comment créer des addons pour Forge, le framework de création rapide d'applications Java EE édité par JBoss/Red Hat, et ainsi, l'étendre.Vous avez aimé la création de projet Java EE du précédent article, alors vous allez aimer créer un addon pour produire des projets Android !

Les derniers articles Premiums

Les derniers articles Premium

Bénéficiez de statistiques de fréquentations web légères et respectueuses avec Plausible Analytics

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Pour être visible sur le Web, un site est indispensable, cela va de soi. Mais il est impossible d’en évaluer le succès, ni celui de ses améliorations, sans établir de statistiques de fréquentation : combien de visiteurs ? Combien de pages consultées ? Quel temps passé ? Comment savoir si le nouveau design plaît réellement ? Autant de questions auxquelles Plausible se propose de répondre.

Quarkus : applications Java pour conteneurs

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Initié par Red Hat, il y a quelques années le projet Quarkus a pris son envol et en est désormais à sa troisième version majeure. Il propose un cadre d’exécution pour une application de Java radicalement différente, où son exécution ultra optimisée en fait un parfait candidat pour le déploiement sur des conteneurs tels que ceux de Docker ou Podman. Quarkus va même encore plus loin, en permettant de transformer l’application Java en un exécutable natif ! Voici une rapide introduction, par la pratique, à cet incroyable framework, qui nous offrira l’opportunité d’illustrer également sa facilité de prise en main.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 64 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous