Neo4j

base de données orientée graphe

Neo4j est un système de gestion de base de données au code source libre basé sur les graphes, développé en Java[3],[4] par la société Neo technology. Le produit existe depuis 2000, la version 1.0 est sortie en [5].

Neo4j
Description de l'image Neo4j-logo color.png.

Informations
Première version [1]Voir et modifier les données sur Wikidata
Dernière version 5.19 ()[2]Voir et modifier les données sur Wikidata
Dépôt github.com/neo4j/neo4jVoir et modifier les données sur Wikidata
Écrit en Java et ScalaVoir et modifier les données sur Wikidata
Environnement Machine virtuelle JavaVoir et modifier les données sur Wikidata
Type Base de données orientée graphe
Labeled property graph (d)Voir et modifier les données sur Wikidata
Licence Licence publique générale GNU version 3 et AGPL-3.0Voir et modifier les données sur Wikidata
Site web neo4j.comVoir et modifier les données sur Wikidata

Généralités modifier

Neo4j permet de représenter les données en tant que nœuds reliés par un ensemble d'arcs, ces objets possédant leurs propres propriétés. Les propriétés sont constitués d'un couple de clé-valeurs de type simple tel que chaînes de caractères ou numérique; celles-ci peuvent être indexées. La modélisation est très proche des concepts métier, il n'est pas nécessaire d'utiliser de clés dans Neo4j, car les relations ont une existence propre. L'absence de modélisation rigide rend Neo4j bien adapté à la gestion de données changeantes et de schémas évoluant fréquemment[réf. nécessaire].

La base de données Neo4j est construite pour être performante pour traiter les liens entre nœuds[réf. nécessaire].

Les traversées utilisent le langage de requête Cypher[6],[7], standard de parcours des connexions, élaboré dans le but de réaliser plus simplement que SQL les opérations de parcours ou d'analyse de proximité qui sont les plus courantes.

Les bases de données de graphes sont des outils puissants pour répondre à des requêtes faisant intervenir des relations entre objets. La recherche du plus court chemin entre deux points du graphe permet par exemple de mettre en place des profils utilisant liens sociaux, géographie et analyse d’impact. [réf. nécessaire]

Exemples d'usages de Neo4j modifier

  • Gestion de réseau/analyse d’impact : avoir la main sur son système et identifier en temps réel le client affecté par une maintenance ou une panne ;[réf. nécessaire]
  • Logistique : calculer le meilleur chemin pour livrer un client ;[réf. nécessaire]
  • Social, collaboration : rechercher très facilement qui sont les amis de mes amis ;[réf. nécessaire]
  • Recommandation : définir en temps réel la liste des produits achetés par mes amis que je n’ai pas moi-même achetés ;[réf. nécessaire]
  • Master Data Management / Gestion de configuration : construction d’un référentiel standardisé performant et sans redondance pour vos données critiques hiérarchisées : hiérarchie d’entreprise et de produit ;[réf. nécessaire]
  • Droits d’accès : gestion des groupes, utilisateurs et droits rapidement et sans redondance ;[réf. nécessaire]
  • Géo-Spatial : modélisation d’une carte routière et calculs d’itinéraires ;[réf. nécessaire]
  • Biologie, interactions moléculaires : réduire les risques d’effets secondaires des médicaments en calculant en temps réel les interactions entre une protéine et une future molécule.[réf. nécessaire]

De tels exemples pratiques sont accessibles en ligne ou à télécharger sous forme d'études de cas via un site de dépôt associé[8].

Modèle modifier

Neo4j est une base de données orientée graphe avec labels et propriétés (Labeled Property Graph), cela signifie que des données sous forme de propriétés peuvent être associées aux différents objets du graphe. Neo4j définit 2 types d'objets dans le graphe : les nœuds et les relations.

Nœuds modifier

Les nœuds[9] servent à représenter des entités. Les nœuds peuvent être associés à des catégories avec l'utilisation d'un ou plusieurs labels.

Label[10] modifier

Les labels servent à créer des groupes, des catégories de nœuds. Ils servent à la fois à décrire l'objet du nœud et à filtrer les recherches lors de requêtes. Les labels peuvent être accumulés sans limite de nombre sur un nœud.

CREATE (Keanu:Person:Actor {name:"Keanu Reeves"});
MATCH (p:Person) return p;  # Toutes les 'Person' du graphe
MATCH (a:Actor) return a;   # Tous les 'Actor' du graphe

Par convention, les labels doivent utiliser la mise en forme Camel[11]. Il est possible d'ajouter ou de supprimer des labels présents sur un nœud grâce aux fonctions set et remove:

MATCH (keanu:Person {name:"Keanu Reeves"}) set keanu :Director;
MATCH (keanu:Person {name:"Keanu Reeves"}) remove keanu :Actor;

Propriétés modifier

Les propriétés décrivent une entité mais sont également le seul moyen de les différencier. Contrairement aux bases de données relationnelles il n'est pas coutume d'utiliser un identifiant unique pour chaque entité, les nœuds sont donc identifiés et différenciés par une combinaison de labels et propriétés.

Exemples de propriétés pouvant être utilisées comme identifiant unique:

  • name pour les personnes
  • title
  • uri ou url pour les livres ou les sites internet

Relation[12] modifier

Une relation dans Neo4j est une association unidirectionnelle entre 2 nœuds, cependant Neo4j est également performant dans les deux directions de lecture. Une relation doit spécifier quel type de lien elle représente, pour cela le type de relation est spécifié à la construction avec la syntaxe ()-[:TYPE]->(). Comme les nœuds, la relation peut contenir des propriétés.

Il est impossible de supprimer un nœud tant qu'il existera des relations entre ce nœud et un autre. Pour supprimer un nœud et toutes ses relations automatiquement, il existe la commande detach delete n.

Propriété modifier

Les propriétés d'un objet sont un ensemble de clé-valeur. Elles peuvent être appliquées sur les nœuds ou les relations. La plupart des formats de données numériques sont supportés comme les chaînes de caractères, les nombres entiers ou flottants, les booléens et les dates[13].

Accès modifier

Pour sélectionner les nœuds ou relations qui possèdent une ou plusieurs propriétés , il est possible de les spécifier dans la section MATCH ou la section WHERE. Pour tester l'existence ou non d'une propriétés dans un objet, utilisez la syntaxe EXISTS(o.prop) ou NOT EXISTS(o.prop)[14].

MATCH (p {name:"Keanu Reeves"}) return p;
MATCH (p) WHERE p.name = "Keanu Reeves";

Modification modifier

Après avoir sélectionné les objets à modifier, la valeur de la propriété peut être ajoutée ou modifiée avec set o.prop = val, et supprimée avec set o.prop = NULL[15], cela implique qu'une propriété ne peut pas contenir une valeur nulle.

À noter modifier

Certains SGBD relationnels s'inspirent désormais de Neo4j pour proposer des extensions de données en graphe en utilisant les mêmes prédicats de navigation que le langage Cypher de Neo4J. C'est le cas en particulier de Microsoft SQL Server 2017 pour laquelle cette fonctionnalité est incluse dans le moteur SQL[16].

Références modifier

  1. « https://neo4j.com/blog/neo4j-1-0-released/ »
  2. « https://neo4j.com/release-notes/database/neo4j-5/ »
  3. (en) Todd Hoff, « Neo4j - a Graph Database that Kicks Buttox », High Scalability, Possibility Outpost, (consulté le ).
  4. (en) Gavin Terrill, « Neo4j - an Embedded, Network Database », InfoQ, C4Media Inc, (consulté le ).
  5. (en) « The top 10 ways to get to know Neo4j », Neo4j Blog, (consulté le ).
  6. Cypher.
  7. (en) « Syntax - Neo4j Cypher Manual », sur Neo4j Graph Database Platform (consulté le )
  8. Site de dépôt associé.
  9. (en) « Graph Modeling Guidelines », sur Neo4j Graph Database Platform (consulté le )
  10. (en) « Graph Modeling Guidelines », sur Neo4j Graph Database Platform (consulté le )
  11. (en) « Graph database concepts - Naming rules and recommendations », sur Neo4j Graph Database Platform (consulté le )
  12. (en) « Graph Modeling Guidelines », sur Neo4j Graph Database Platform (consulté le )
  13. (en) « Graph database concepts - Getting Started », sur Neo4j Graph Database Platform (consulté le )
  14. (en) « WHERE - Neo4j Cypher Manual », sur Neo4j Graph Database Platform (consulté le )
  15. (en) « SET - Neo4j Cypher Manual », sur Neo4j Graph Database Platform (consulté le )
  16. (en-US) MikeRayMSFT, « Graph processing - SQL Server and Azure SQL Database », sur learn.microsoft.com, (consulté le )

Voir aussi modifier

Articles connexes modifier