Neo 4j
Neo 4j
Neo 4j
NEO4J
2
Concept
• Les bases de données orientées graphes tournent autour de trois concepts :
les nœuds, les relations et leurs propriétés.
3
Concept: Les nœuds
• L'unité fondamentale qui forme un graphe est le nœud.
• Les nœuds sont des enregistrements composés de propriétés de type
clef/valeur, sans schéma préétabli. Généralement, ils représentent
une entité du modèle.
• Pour différencier les nœuds, Neo4j apporte la notion de label. Ceux-
ci permettent de donner un rôle ou un type à un nœud (un nœud peut
avoir plusieurs labels).
4
Concept: Les relations
• Les relations entre les nœuds sont la clef de voûte des graphes, c'est ce qui
permet de lier des données et de créer des structures comme des listes, des
arbres, des maps…
• Neo4j les définit comme étant constituées d'un nœud de départ, d'arrivée
(donc une relation avec un sens) et d'un type. De plus, tout comme les
nœuds, elles sont également un enregistrement, et donc peuvent avoir des
propriétés de type clef/valeur.
5
Cypher
• Cypher est un langage de requête de graphe déclaratif qui
permet une interrogation et une mise à jour expressives et
efficaces du graphe.
• Cypher est conçu pour être simple, mais puissant; les requêtes
de base de données très compliquées peuvent être facilement
exprimées.
• Il s’inspire de différentes approches et s’appuie sur les
pratiques établies en matière d’interrogation expressive. De
nombreux mots-clés, tels que WHERE et ORDER BY, sont
inspirés de SQL
6
Cypher
• Cypher emprunte sa structure à SQL - les requêtes sont
construites à l'aide de différentes clauses.
• Voici quelques clauses utilisées pour lire le graphique:
MATCH: C’est le moyen le plus courant d’obtenir des données du graphique.
WHERE: contrainte bien précise.
RETURN: on retourne quoi comme résultat .
• Et voici des exemples de clauses utilisées pour mettre à jour le
graphique:
CREATE(et DELETE): Créer (et supprimer) des nœuds et des relations.
SET(et REMOVE): définir des valeurs sur des propriétés et ajoutez des étiquettes
sur les nœuds à l'aide de SETet utilisez REMOVE pour les supprimer.
MERGE: Correspond à des nœuds et modèles existants ou en crée de
nouveaux. Ceci est particulièrement utile avec des contraintes uniques.
7
Cypher
• Les nœuds sont représentés avec des parenthèses, ce qui ressemble à des
cercles : ()
• Si vous avez besoin d'identifier le nœud dans votre requête (dans une
clause WHERE par exemple), il suffit de lui donner un nom : (monNoeud)
8
Cypher
• Les relations sont représentées par deux tirets avec un '>', ce qui ressemble à une
flèche : -->
• Si vous avez besoin d'identifier la relation dans votre requête, vous pouvez lui
donner un nom comme ceci : -[maRelation]->
9
Les Clauses principales
• MATCH: est utilisée pour rechercher le modèle décrit dans celle-ci.
• Exemple 1: obtenir tous les nœuds:
10
Les Clauses principales
• ORDER BY : trier les résultats avant la transmission.
On ajoutant « DESC » après ORDER BY, le tri se fera dans l’ordre inverse.
• SKIP définit à partir de quelle ligne commencer, en incluant les lignes
dans la sortie.
11
Les Clauses principales
• UNWIND: développe une liste en une séquence de lignes.
• WHERE: ajoute des contraintes aux modèles. On peut utiliser les
opérateurs booléens AND, OR, XOR et NOT
12
Les Clauses principales
• Pour créer une relation entre deux nœuds, on obtient d’abord les deux
nœuds. Une fois les nœuds chargés, on crée simplement une relation entre
eux:
13
Les Clauses principales
• DELETE: est utilisée pour supprimer des nœuds, des relations ou des
chemins:
• MATCH (n:Person { name: 'UNKNOWN' }) DELETE n
• MATCH (n) DETACH DELETE n : supprimer un noeud avec tous ses relations.
• SET: est utilisée pour mettre à jour les labels sur les nœuds et les propriétés
sur les nœuds et les relations.
• REMOVE: est utilisée pour supprimer les propriétés des nœuds et des
relations et pour supprimer les labels des nœuds.
14
Les Clauses principales
• FOREACH: est utilisée pour mettre à jour les données d'une liste, qu'il
s'agisse des composants d'un chemin ou du résultat de l'agrégation.
15
Les Clauses principales
• LOAD CSV est utilisé pour importer des données à partir de fichiers CSV:
• "WITH HEADERS" : va permettre de récupérer la première ligne du CSV comme des identifiants
de colonne
• Enfin, la fonction "CREATE" va ici permettre de créer des nœuds dans graphe avec comme
paramètre les la première colonne du CSV (données pointées par "csvLine.CSVLigne1Colonne1)
16
Les Clauses principales
• Pour importer de grandes quantités de données, on peut utiliser le USING
PERIODIC COMMIT pour indiquer à Neo4j d'effectuer une validation
après un certain nombre de lignes. Cela réduit la surcharge de mémoire liée
à l'état de la transaction. Par défaut, la validation aura lieu toutes les 1000
lignes.
17
Exemples
1- MATCH (ville)-[:A_COTE]->(b)
2- WHERE ville.nom = 'Montréal'
3- RETURN DISTINCT b.nom
1- Trouve les nœuds qui ont un lien A_COTE vers un autre nœud
2- Pour ces nœuds, ne retenir que ceux dont la ville est Montréal
3- Retourne au programme le nom de ces villes
(ville) et (b) sont entre parenthèses, ce qui signifie qu’ils sont des nœuds
[ :A_COTE] est entre crochets, ce qui signifie qu’il est une relation de type A_COTE
Dans la section MATCH, la flèche est de (ville) vers (b).
DISTINCT permet de supprimer les doublons
18
Les fonctions Cypher
• Les fonctions prédicats: Les prédicats sont des fonctions booléennes qui
renvoient true ou false pour un ensemble d'entrées non nulles. Ils sont le
plus souvent utilisés pour filtrer les sous-graphes dans la partie WHERE
d'une requête.
fonction Description Exemple
all() Teste si le prédicat est valable pour tous MATCH p =(a)-[*1..3]->(b)
WHERE a.name = 'Alice' AND
les éléments d'une liste. b.name = 'Daniel' AND ALL (x IN
nodes(p) WHERE x.age > 30)
RETURN p
20
Les fonctions Cypher
• Les fonctions d’agrégation
21
Exemples
• MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)
• WHERE movie.title STARTS WITH "T"
• RETURN movie.title AS title, collect(actor.name) AS cast ORDER BY title
ASC LIMIT 10;
22
• CREATE (Theo:Staff {title:'Theo', joined:2014, job: 'Developer', city:
'Nantes'})
• CREATE (Jon:Staff {title:'Jonathan', joined:2013, job: 'Project Manager',
city: 'Lille'})
• CREATE (Synbioz:Company {name:'Synbioz', born:2007})
• MATCH (n:Staff) RETURN n LIMIT 25
• MATCH (n:Staff) MATCH (m:Company {name: 'Synbioz'}) CREATE
(n)-[:WORK_IN]->(m)
23
Références
• https://neo4j.com/docs/cypher-manual/current/clauses/
• https://www.irit.fr/~Thierry.Millan/MemoiresENG221/Nicolas_vergnes.pdf
• https://www.infoq.com/fr/articles/graph-nosql-neo4j/
24