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.
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 :
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.
Puis nous allons écrire dans chaque « bout du tissu », ou morceau de fabric.
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 :
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