Utilisation Massive
! Changez de base de données !
Et si on prenait 1000 noeuds ?
L'objectif de cet exercice est d'observer le comportement du logiciel lorsque l'on a affaire à beaucoup de données :
L'idée est donc de simuler de manière minimaliste un réseau social. |
Vous allez avoir besoin du script cypher suivant pour extraire les 3 csvs qui vont suivre :
Il va falloir modifier le fichier « exercice3.cypher »
car il dépend de l'emplacement des fichiers csv sur votre disque (chemin absolu), il est donc préférable de placer les 3 csvs à la racine du disque. Cf capture ci-dessous.
Question
Devant cette masse de données, on peut se demander quels sont les nœuds qui communiquent le plus ?
Formalisme :
Les nœuds sont de la forme : (n:Node {name: 'node_X' }) avec X allant de 1 à 1000
Les relations sont de la forme : (n1)-[:SUIVRE { type: 'suivi' }]->(n2) ou (n1)-[:COMMUNIQUER{ type: 'communication' }]->(n2)
Penser à utiliser LIMIT, c'est conseiller.
Il est sans doute question de se servir de "ORDER BY"
Voici la requête :
MATCH n-[r]->()
where r.type = 'communication'
RETURN n, count(r)
ORDER BY count(r) DESC
LIMIT 5
Pour avoir une approche plus visuelle sur un des nœuds les plus communiquant :
match (n)-[r]->() where n.name = 'node_100' AND r.type = 'communication' return r
Question
Dans une masse de données comme celle-ci, il pourrait être intéressant de trouver les plus court chemin entre les noeuds.
Il existe une fonction Cypher/Neo4J pour ça : shortestPath qui renvoie la liste des noeuds du plus court chemin d'un noeud donné à un autre.
Pour l'utiliser, il faut la lancer dans un match et lui donner une relation en paramètre.
On lui donne une relation ainsi que les deux nœuds précédemment matchés comme ceci : shortestPath((X)-[R*]->(Y)) avec X, Y des noeuds et R une relation.
L'étoile '*' désigne le fait que l'on cherche l'ensemble des plus courts chemins.
Voici la requête :
MATCH (n:Node { name:"node_200" }),(n2:Node { name:"node_5" }),
p = shortestPath((n)-[:SUIVRE*]->(n2))
RETURN p
Voici la même requête mais avec la relation ":COMMUNIQUER" :