Cette étude vise à présenter les concepts clés d’une base de données orientée graphe. La modélisation et la mise en œuvre des cas d’utilisation seront réalisées avec la base de données NEO4J, version 3.1.
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Base de données graphe, Noe4j concepts et mise en oeuvre
1. NOSQL: BASE DE DONNÉES GRAPHE, NOE4J, CONCEPTS ET MISE EN ŒUVRE
MODÉLISATION ET IMPLÉMENTATION DU CAS D’USAGE SLIDESSHARE.NET
DR MUSTAPHA MICHRAFY
CONTACT : DATASCIENCE.KM@GMAIL.COM
2. PLAN
1. Contexte
2. Objectif et prérequis
3. Les base de données NoSQL
4. Les modèles NoSQL : axes volume et complexité
5. Classification des bases de données NoSQL
6. Modèle graphe : pour quelle activité
7. Concepts des Bases de données Graphe
8. Base de données graphe : force et faiblesse
9. D’une BD relationnelle vers une BD graphe
10.Console web Neo4j
11.Le langage de requêtes Cypher
12. Les clauses dans Cypher
13. Les fonctions dans Cypher
14.Les distributions Neo4j
15. Les drivers de la base
16. Types de données supportés
17. Mise en œuvre avec Cypher
2
M.MICHRAFY
3. CONTEXTE
Cette étude a été menée dans le cadre des rencontres de travail
organisées au Laboratoire CERMSEM, dans le cadre du séminaire
« DataScience, concepts et applications », Centre d'Économie de la
Sorbonne (CES).
Elle vise à présenter les différentes opérations portant sur la
préparation des données
3
M.MICHRAFY
4. OBJECTIF ET PRÉREQUIS
• Notions de graphes
• Notions de SQL
• Expressions régulières ou pattern maching
Cette étude vise à présenter les concepts
clés d’une base de données orientée
graphe. La modélisation et la mise en œuvre
des cas d’utilisation seront réalisées avec la
base de données NEO4J, version 3.1.
PrérequisObjectif
4
M.MICHRAFY
5. BASE DE DONNÉES GRAPHE NEO4J?
• Adaptée pour la modélisation des réseaux
sociaux
• Adaptée pour les données fortement
connectées
• Adapté pour parcourir des modèles complexes
à partir d'un ou de plusieurs points de départ.
• Dispose d’un langage d’interrogation similaire
à SQL
• Concepts basés sur la théorie des graphes
• Modèle de données accessibles au métier
• Langage, similaire à SQL, pour la manipulation
des données de la base
• API pour différents langages ( JAVA, SCALA,
Python, R, ….)
• API REST
Motivations? Fonctionnalités
5
M.MICHRAFY
6. LES BASE DE DONNÉES NOSQL
6
Les bases de données de type clé/valeur sont
basiques.
Chaque objet est identifié par une clé unique.
Elles offrent de meilleurs performances.
Pas de schéma disponible
Adaptée à le gestion des évènements, à la gestion
des traces, ect.
BD orientées Clé/Valeur : Accumulo, Dynamo,
Voldemort, Redis, Riak
BD de type Clé/Valeur
Elle stocke les données par colonne et non par ligne.
Elle est proche des bases de données relationnelles.
La mise en œuvre est relativement complexe.
Ce type de base de données fait appel aux notions
de clé et famille de colonnes.
BD orientées colonne : Hbase, Cassendra, Hypertable,
BigTable
BD de type Colonne
Collections de documents, composés chacun de
champs et de valeurs associées,
Les valeurs peuvent être requêtées
Adaptée au stockage de profils utilisateur, aux
données session, au contenu d’une page web, ect.
BD orientées document : MongoDB CouchDB,
Couchbase
BD de type document
Elle est adaptée pour la gestion des données
fortement interconnectées, s’inspire des graphes,
composée de nœuds et de relations matérialisant des
liens entre les nœuds.
BD orientées graphe : ArangoDB, FlockDB, Orientdb,
BD de type Graphe
Les BD NoSQL n’ont pas vocation à remplacer les bases de données relationnelles.
Chaque base de données répond a un besoin et adapté pour un cas d’usage.
7. LES MODÈLES NOSQL : AXES VOLUME ET COMPLEXITÉ
7
Orientée Clé/valeur
Orientée Colonne
Orientée Document
Orientée Graphe
Volumededonnées
Complexité des données
8. CLASSIFICATION DES BASES DE DONNÉES NOSQL
8
NoSQL
Colonne
Document
Clé/valeur
Graphe
Dynamo
Redis Riak
Voldemort
Accumulo
Hbase
Cassendra
Hypertable
BigTable
MongoDB CouchDB
Couchbase
NEO4J
ArangoDB
FlockDB
Orientdb
9. MODÈLE GRAPHE : POUR QUELLE ACTIVITÉ
9
Graphe
Base de données
Graphe
Graphe pour le
« processing »
Ce modèle est adapté
pour le stockage de
données.
Ce sont les API
proposant des
algorithmes venant de
la théorie des graphes
Important : Ici, nous présentons les base de données graphe pour le
stockage de données
10. BASE DE DONNÉES GRAPHE : CONCEPTS
10
• Une base de données
orientée graphe vise à
modéliser et stocker des
données sous forme de
graphe
• Pour cela, il s’appuie sur :
• Les nœuds
• Les relations : pour relier
les nœuds
• Propriétés : données
sous forme de clé -
valeurs
Modélisation
• Le modèle de données est
un ensemble de nœuds qui
sont reliés par des relations.
• Les nœuds et les relations
sont typés, c-à-d, ils sont
associés à un même label.
• Les relations sont orientées
• Des données sous forme de
clé/valeur sont stockées
dans les nœuds et les
relations.
Modèle de données
Graphe
Nœud Relation
données
Se compose
Relie
11. LES CONCEPTS DE NEO4J
11
Schema
Paths
Propriétés
Contraints
Index
Noeuds Relations
Labels
Concepts
• Nœuds : dans un graphe, nous avons des nœuds qui
sont reliés. Pour un réseau de Metro, les nœuds
désignent les stations et dans un réseau social, le
nœud désigne la personne.
• Relations : elles matérialisent le lien entre deux nœuds.
Pour le réseau de métro, les relations représentent la
distance ou le temps de parcours.
• Propriétés : permet de persister des données sous
forme de clé/valeur pour les nœuds ou relations
• Labels : ils permettent d’associer un rôle ou un type à
un nœud.
• Path : il désigne un chemin entre deux nœuds
• Index : une structure de donnée associée à des
nœuds ou des relations favorisant la performance.
• Contraintes : elles permettent de renforcer l’intégrité
des données (nœuds et relations).
• Schema : la notion de « schema », en Neo4j, est
optionnel. Il s’applique seulement sur la machine
maitre dans un cluster Neo4j.
• Traversal : les stratégies de parcours pour identifier un
path.
Traversal
12. BASE DE DONNÉES GRAPHE : FORCE ET FAIBLESSE
12
Des gains de performance :
• la performance des BD orientées graphe restent
identiques quand le jeu de données s'accroît.
• Ce n’est pas le cas pour les BD relationnelles, les
performances des requêtes se dégradent avec
la croissance des jointures
Des gains de flexibilité :
• L’ajout des nœuds et des relations n’impactent
ni les requetés ni les cas d’usage développés.
Des gains d’agilité
• Le modèle de données graphe favorise
l’évolution de la base en cohérence avec les
nouveaux cas d’usage métier
• Le modèle de données graphe favorise
l’échange avec le métier.
Partitionnement des graphe
• Les bases de données Graphe rencontrent
parfois des problèmes de partitionnement
puisque il est difficile d’opérer un partitionnement
d’un graphe en tenant compte les latences de
réseau.
Calcul agrégé pour un volume important
• Les BD orientées graphe ne sont pas adaptées
pour le calcul agrégé pour un volume important
de données. Dans ce cas, il est pertinent
d’explorer une BD relationnelle ou une base de
données orientée colonne.
Force Faiblesse
13. D’UNE BD RELATIONNELLE VERS UNE BD GRAPHE
13
Table
Ligne
d’une
Table
Clé
étrangère
Label Nœud Relation
Colonnes
d’une
table
Propriétés
14. 14
BASE DE DONNÉES ORIENTÉE GRAPHE : EXEMPLE SYSTÈME DE FICHIER
Root
Directory
C
Directory
D File
F
• Un système de fichiers dispose d’un nœud
racine.
• Il est composé de répertoire et fichiers
• Chaque répertoire peut comporter des
dossiers et de fichiers
• Un nœud désigne un dossier ou un fichier
• Le nœud Root n’a pas de parent
• La relation entre deux nœud est « Parent
de ».
• Dans notre cas, Root est parent de tout
les nœuds. « C » est un parent du
fichier « F » et du dossier « D »
Parent_de
Parent_de
Parent_de
15. BASE DE DONNÉES ORIENTÉE GRAPHE : EXEMPLE FLIGHT
15
AirPort AirPort
Flight
Ticket
destination
origination
assign
• Un vol est associé à
• Un Airport de départ
• Et un Airport de destination
• Un vol est associé à un horaire :
• Heure de départ
• Heure d’arrivé
• Ticket est associé à un vol.
16. BASE DE DONNÉES ORIENTÉE GRAPHE : EXEMPLE DE SLIDESHARE.NET 1/2
16
Stefan
Claire
Apache
Spark
Scala
Joe
Java 8
Follow
Follow
Like
Language
BigData
Like
Category of
17. BASE DE DONNÉES ORIENTÉE GRAPHE : EXEMPLE DE SLIDESHARE.NET 2/2
17
Person Person
Slides
Flow
Licence
Domaine
Category of
Like
Person
Visualise
Has a
Person
Comment
• SlideShare est un site web
d'hébergement et de partage de
présentations et d'autres contenus
professionnels.
• Les personnes peuvent publier, visualiser,
commenter, télécharger, ou apprécier
une présentation.
• Un adhérent peut suivre un autre
adhérent
18. CONSOLE WEB NEO4J
18
Console est une interface web,
basé sur une API REST
Cette console est accessible par
défaut sur le port 7474.
Elle est adaptée pour le test et le
prototypage
Cette console permet :
d’éditer, et d’exécuter des
requêtes
de visualiser le résultat de la
requête sous forme d’un
graphe
de visualiser les nœuds sous
d’autres format
de visualiser la réponse du
serveur Neo4j.
d’exporter le résultat de retour
sous différents formats (CSV,
JSON, SVG, PNG)
Console ?
Il permet d’éditer une requête, sur
plusieurs lignes ; il basé sur le
langage d’interrogation Cypher.
Supporte la coloration syntaxique
Permet d’exécuter la requête
permet de mémoriser ou d’annuler
une requête.
Editeur
L’onglet Graphe : de visualiser le
résultat de lail permet requête
exécutée sous forme d’un graphe
L’onglet ROWS : Il offre aussi la
possibilité de voir les nœuds
comme des tables.
L’onglet TEXT permet de voir les
nœuds en format JSON
L’onglet code affiche la réponse
du serveur Neo4j. C’est le résultat
de l’API REST. Le format est JSON.
Interface de visualisation
19. LE LANGAGE DE REQUÊTES CYPHER
19
CYPHER est le langage
d’interrogation de la base de
données NEO4J.
Cypher est un langage déclaratif.
Il s’appuie sur des motifs (pattern)
pour décrire ou interroger la base
de données
Il utilise une syntaxe similaire à celle
de SQL et insensible à la casse
CYPHER?
Le langage CYPHER permet de
créer des nœuds et aussi des
relations.
Il s’agit d’une opération d’écriture
puisqu’elle permet de créer et
persister des nœuds et des relations
dans la base.
Opération : Créer
CYPHER permet d’interroger la base
de données pour extraire des
données respectant un motif (
pattern)
La syntaxe utilisée est similaire aux
expressions régulières (pattern
matching)
Opération : rechercher
Comme toutes les bases de
données, il est possible d’analyser
une requête d’écriture ou de
lecture.
Opération : profiling
20. LES CLAUSES DANS CYPHER
20
Clause
Clause
d’écriture
Clause de
lecture
Clause
générale
• Une clause est une sorte d’opération/primitive en Cypher.
• La clause est une notion fondamentale.
• elles sont dédiées à la création des nœuds, des relations, à
la recherche des données dans le graphe, au filtrage, au
projection, au trie des données, etc.
• En Neo4j, nous distinguons 3 type de clauses :
1. Clauses de lecture : ce sont des opérations de filtrage
ou de recherche de données dans la base selon des
critères spécifiques.
2. Clauses d’écriture : ce sont des opérations permettant
de créer, supprimer ou modifier des données (nœuds
relations, ou propriétés)
3. Clauses générales : ce sont des opérations qui ne font
partie ni de clauses de lecture ni de clause d’écriture
Est-un
21. LE LANGAGE CYPHER : CLAUSES DE LECTURE
21
Read
Clauses
Match
Optional
Match
Where
Start
Aggregation
Load
CVS
count
sum AVG
max
max
• Match : spécifier le pattern à chercher
• Optional Match : similaire a Match, mais il retourne null en
cas d’absence de résultat
• Where : permet de filtrer les résultats d'une requête de
Match ou Optional Match..
• Start : permet de trouver des points de départ (nœud ou
Relations). Start concerne seulement les éléments
indexés.
• Load CSV : permet d’importer un fichier csv
• Aggregation : permet d’utiliser des fonctions
d’agrégation :
• Count : pour compter le nombre d’éléments
• Sum : pour sommer des valeurs
• AVG : pour faire la moyenne
• Max/min : pour le min ou le max
• Ect.
22. LE LANGAGE CYPHER : CLAUSES D’ÉCRITURE
22
Write
Clauses
Create
Merge
Set
Remove
Delete
Foreach
• Create : créer un nœud ou une relation
• Merge: s’assure que le motif existe, sinon, il faut le
créer
• Set : actualiser les labels ou les propriétés des
nœuds ou des relations
• Delete: supprimer un nœud, une relation ou un path
• Remove : supprimer des propriétés et des labels
d’un nœud ou une relation
• Create Unique : il fait appel à la fois a la clause
Match et Create. Il peut créer un nœuds s’il n’existe
pas.
• Load CSV : importer un fichier csv et ou créer les
éléments associés
• Foreach : actualiser les valeurs d’une liste
appartenant à un Path ou un résultat d’agrégation
• Periodic Commit : limiter le nombre de lignes par
transaction. il est utile pour éviter la surcharge de la
mémoire lors d’un chargement de fichier csv.Create
Unique
Load
CSV
Periodic
Commit
23. LE LANGAGE CYPHER : CLAUSES GENERALES
23
General
Clauses
Return
Order
by Limit
Unwind
With
• Ce sont des clauses générales qui s’utilisent avec celles de
lecture ou d’écriture.
• Return : permet de définir les données à inclure dans le
résultat de la requête.
• With : permet d’enchainer des requêtes, similaire à pipe. Par
conséquent le résultat d’une requête pourrait être accessible
pour la seconde requête.
• Order by : permet de trier le résultat de retour, similaire à order
by de SQL. Il est utilisé avec les clauses Return ou With.
• Limit : permet de limiter le nombre d’éléments retournés par la
clause Return. Elle est similaire à la clause Limit de SQL.
• Skip : comme en SQL, il permet de retourner les resulats à partir
d’une ligne donnée.
• Unwind : permet de transformer une liste d’éléments en une
séquence de lignes. La liste peut être des paramètres ou des
résultats.
• Union : comme en SQL, cette clause permet de fusionner des
jeux de données sans répétition.
• Call : permet d’invoquer une procédure déployée sur le
serveur Neo4j.
Call
Union
Skip
24. LES FONCTIONS DANS CYPHER
24
Fonction
Booléenne
Fonction
Scalaire Fonction
mathématique
Fonction
Liste
Fonction
• Neo4j dispose une API de fonctions.
• Les fonctions sont classées en 4 classes :
• Les fonctions booléennes : ce sont des prédicats.
• Les fonctions scalaires : ce sont les fonctions qui
retournent un scalaire de type String, Entier,
nœud, ….
• Les fonctions mathématiques : ce sont des
fonctions numériques (abs, ceil, …),
trigonométriques, logarithmique (exp, log, sqrt,
…) et fonctions de traitement de chaine de
caractère
• Les fonctions qui retournent une liste
• Ces fonctions peuvent être utilisées dans les clauses.
• La majorité de fonctions peuvent retourner des
valeurs nulles
25. DISTRIBUTIONS NEO4J
25
Distribution
Communautaire Distribution
Entreprise
Distribution
• Deux distributions Neo4j
• Distribution communautaire
• Distribution entreprise
• Distribution communautaire
• Adaptée aux projets test/pilote
• Supporte les fonctionnalités clés
• ACID (Atomicité, Cohérence, Isolation, Durabilité)
• Langage Cypher
• API de programmation
• La distribution Entreprise :
• + Haute disponibilité
• + Scalabilité horizontale
• + Monitoring
• + Système de cache
• + Outils d’administration
26. DRIVER POUR NEO4J
26
Natif
Java
C#
PythonJavascript
Driver
R
PHP
Ruby
Erlang
C/C++
Haskell
• Neo4j offre plusieurs drivers.
• On distingue deux types :
• Driver natif : ce sont les drivers fournis
par Neo4j
• Driver non natif : ce sont les drivers
fournis par la communauté
• Les drivers natifs portent sur
• Java : par conséquent les langages
Java, Groovy, Clojure ou Kotlin sont
supportés
• .Net : le langage C# est supporté et
d’autres.
• Python
• Javascript
• Les drivers non natifs portent sur :
• R, PHP, Ruby, Erlang, C/C++, Haskel
27. TYPE DE DONNÉES SUPPORTÉS
27
Type
Boolean
Integer
Float
String
Map
List
Node
Relationship
Path
• Neo4j dispose d’un système de types de
données pour le traitement et le
stockage des données.
• Le driver permet de traduire les
données d’un format à un autre.
• Les types de données supportés par
Noe4j sont
• Boolean
• Integer
• Float
• String
• List
• Map
• Node
• Relationship
• Path
28. CAS D’UTILISATION
28
• Cette section présente la mise en œuvre d’un cas d’usage
• L’objectif consiste à modéliser et mettre en ouvre le site de partage
www.slideshare.net
• Les points abordés sont :
1. La modélisation
2. La mise en œuvre
• La mise en œuvre est réalisée avec CYPHER 3.1 et console web Neo4J.
29. CAS D’UTILISATION : DESCRIPTION DU MODÈLE DE DONNÉES
29
• Sur Slideshare.net, nous avons :
• des adhérents
• des documents : ce sont des présentations publiées par des adhérents.
• Un document est associé à un domaine et disposant d’une licence.
• Un document peut être :
• visualisé par un adhérent ou un internaute
• apprécié par un adhérent
• commenté par un adhérent
• Un adhérent peut être suivi par un autre Adhérent.
• Un document et un adhérent disposent des propriétés :
• Adhérent : nom et émail
• Document : nom, nombre de pages, format, tag
30. CAS D’USAGE : MODÈLE DE DONNÉES
30
Person Person
Slides
Follow
Licence
Domain
Category of
Like
Person
View
Has a
Person
Comment
31. CAS D’USAGE : MODÈLE DE DONNÉES
31
Person
Person
Slides
Follow
Licence
Domain
Category of
Has a
Statistic
• De point de vue métier, il n’est
important de connaitre :
• Le nombre de visualisation d’un
slides par personne
• Le nombre de téléchargement
d’un document par personne
• Le nombre de Like par personne
• Par conséquent, nous créons un
neoud Statistic associé à chaque
document.
• Le nœud Statistic permet de
persister les statistiques globales
(téléchargement, like, visualisation)
associés à un document
Stat_Of
32. CAS D’USAGE : PROPRIÉTÉS
32
• Nom
• Email
• Nom
• Format
• Nombre de pages
• Tag
• Nom
• Info
• Nom
• Views
• Downloads
• Comments
• Likes
• Shares
Person Slides
Licence Domain
Statistic
33. CAS D’USAGE : ETAPES DE LA CRÉATION DU MODÈLE DE DONNÉES
33
Créer les nœuds de
type Slides
Créer les nœuds de
type Adhérent
Créer la relation
« publier » entre les
adhérents et les slides
Créer la relation
« publier » entre les
adhérents et les slides
Créer la relation
« Follow » entre deux
adhérents
Créer les nœuds
« Domain » et
« Licence »
Créer la relation « Has
a » entre « Slides » et
« Domain »
Créer la relation « Is »
entre « Slides » et
« Licence »
Créer la relation
« Like »
Supprimer la relation
« Like »
Pour chaque « slides »,
créer un nœud
« Statistic » et créer la
relation « Statistic_Of »
Afficher le graphe des
données
1 2 3 4
5 6 7 8
9 10 11 12
34. CRÉER LES ADHÉRENTS : CLAUSES CREATE
Create permet de créer des
nœuds et relations.
Lors de la création, il est possible
de spécifier les propriétés sous
forme de clé valeur
Les propriétés sont entourées par
des accolades {}
Les propriétés sont séparées par
« ; ».
Chaque adhérent a deux
propriétés : Nom, Email
Il est possible de faire un
commentaire sur une ligne.
Clause create
// creer les adhérents : Blanc, Roux, Morel et Roche
CREATE
// creer l’adhérent Blanc Olivier
// specifier la propriètes nom et email
(BalancO:Adherent {name:'Blanc Olivier', email:'o.blanc@gmail.com'}),
// créer le reste des adhérents en specifiant le nom et l’email
(RouxS:Adherent {name:'Roux Stefan', email:'s.roux@gmail.com'}),
(MorelA:Adherent {name:'Morel Alain', email:'a.morel@gmail.com'}),
(RocheL:Adherent {name:'Roche Lara', email:'l.roche@gmail.com'})
Créer 4 adhérents
34
M.MICHRAFY
35. AFFICHER LES ADHÉRENTS : CLAUSES MATCH
La clause MATCH permet
d’interroger les données, c-à-d des
nœuds et des relations.
Cette clause doit utiliser la clause
return pour afficher.
Sans la clause return, une erreur
sera obtenue.
La clause LIMIT permet de limiter le
nombre d’éléments affichés.
Clause MATCH
// Chercher les noeuds sur la base de données
MATCH (p)
// afficher les noeuds trouvés
RETURN (p)
// limiter l’affichage à quatre noeud
LIMIT 4
Créer 4 neouds de la base
35
M.MICHRAFY
Blanc
Olivier
Morel
Alain
Roux
Stefan
Roche
Lara
Vue graphe
36. CRÉER LES DOCUMENTS ET AFFICHER LES NŒUDS DOCUMENTS
L’objectif est de créer 3
documents de type Slides.
La notion LABEL permet de
regrouper le même nœud sous la
même catégorie.
La clause RETURN permet
d’afficher les 3 slides. Pour cela, il
faut spécifier le nom de chaque
slide.
Pour chaque document, on
précise le nom, le format, le
numéro de page et le tag.
Clause create
// creer les documents ave le Label Slides : ApacheSpark, Scala, MongoDB
CREATE
(ApacheSpark:Slides {name:'Apache SPark', format:'pdf', numPages:40,
tag:['spark', 'rdd', 'big Data', 'mapreduce']}),
(Scala:Slides {name:'Scala', format:'powerpoint', numPages:45, tag:['scala',
'programmation fonctionnelle', 'pattern matching', 'trait']}),
(MongoDB:Slides {name:'MongoDB', format:'pdf', numPages:45, tag:['MongoDB',
'Sharding', 'NoSQL', ' Fault Tolerance']})
// la claude retourn le nom associé à chaque document
RETURN ApacheSpark, Scala, MongoDB
Créer 3 documents
36
M.MICHRAFY
Scala
MongoDB Apache
Spark
Vue graphe
37. CRÉER LA RELATION PUBLIER
La clause CREATE permet de créer
des relations (en spécifiant les
extrémités)
On suppose qu’Olivier a publié tous les
documents
Par conséquent, on associe la relation
publier avec Olivier et les documents.
Le processus est le suivant :
Trouver Olivier
Associer Olivier à chaque
document
Afficher le voisinage de Olivier
Clause create
// Trouver Blanc Olivier en utilisant la clause Where
MATCH (BlancO:Adherent) where BlancO.name='Blanc Olivier‘
// Pointer tout les slides ( s designe tout les slides)
MATCH (s:Slides)
// Créer la relation publier en Lara et les documents identifiers
CREATE (BlancO)-[r:Publish]-> (s)
// afficher le noeud Blanc Olivier et son voisinage
RETURN BlancO,s,r
Créer 3 relation « Publier »
37
M.MICHRAFY
Scala
MongoDB
Apache
Spark
Vue graphe
Blanc
Olivier
38. CRÉER LA RELATION SUIVRE
Avec la clause CREATE, nous créons
deux relations «suivre».
Stefan et Alain vont suivre Olivier
Le processus est le suivant :
Trouver Olivier, Stefan et Alain
Créer la relation suivre entre Alain
et Olivier et aussi entre Stefan et
Olivier
Afficher le voisinage de Olivier
Clause create
// Trouver Olivier
MATCH (BlancO:Adherent) where BlancO.name='Blanc Olivier‘
// Trouver Alain
MATCH (MorelA:Adherent) where MorelA.name='Morel Alain‘
// Trouver Stefan
MATCH (RouxS:Adherent) where RouxS.name='Roux Stefan‘
// Creer la relation «Suivre» entre Olivier, Stefan, Alain
CREATE (MorelA)-[:Follow]-> (BlancO)
CREATE (RouxS)-[:Follow]-> (BlancO)
// Afficher Oliver et son voisiange
RETURN BlancO, MorelA, RouxS
Créer 2 relations « Suivre »
38
M.MICHRAFY
Vue graphe
Blanc
Olivier
Morel
Alain
Roux
Stefan
39. CRÉER LES NŒUDS DE TYPE DOMAINE ET LICENCE
Avec la clause CREATE, nous allons
créer :
Les nœuds Domaine
Les nœuds Licence
Clause create
// créer trois domaines : Lanagage, BigData, MongoDB
CREATE
(scala:Domain {name:'Lanagage'}),
(spark:Domain{name:'BigData'}),
(mongoDB:Domain{name:'NoSQL'})
// créer deux Licence : CC et CC By By-NC
CREATE
(cc:Licence{name:'CC', info:'cc by attribution'}),
(ccbync:Licence{name:'CC BY-NC', info:'attribution pas de modification'})
RETURN scala, spark, mongoDB, cc, ccbync
Créer les domaines et les licences
39
M.MICHRAFY
Vue graphe NoSQL
BigData CC
CC
BY-NCLangages
40. CRÉER LES RELATIONS SÉMANTIQUES DOCUMENT, DOMAINE
L’objectif est de créer des relations :
Entre un document et un
domaine
Entre un document et une licence
Les étapes sont :
Trouver les documents
Trouver les domaines
Trouver les licences
créer les relations
Clause create
MATCH (spark:Slides) where spark.name='Apache SPark'
MATCH (scala:Slides) where scala.name = 'Scala'
MATCH (mongoDB:Slides) where mongoDB.name = 'MongoDB'
MATCH (lang:Domain) where lang.name='Langage'
MATCH (bigdata:Domain) where bigdata.name = 'BigData'
MATCH (nosql:Domain) where nosql.name='NoSQL'
CREATE (spark)-[:Category_Of]-> (bigdata)
CREATE (scala)-[: Category_Of]-> (lang)
CREATE (mongoDB)-[: Category_Of]-> (nosql)
RETURN spark,scala, mongoDB, lang, bigdata, nosql
Créer 3 relations « Category_Of»
40
M.MICHRAFY
Vue graphe
Scala
MongoDB Apache
Spark
NoSQL
BigData Langages
41. CRÉER LES RELATIONS SÉMANTIQUES DOCUMENT, DOMAINE
L’objectif est de créer des relations :
Entre un document et un
domaine
Entre un document et une licence
Les étapes sont :
Trouver les documents
Trouver les licences
Créer les relations
Afficher le résultat
Clause create
// identifier les documents
MATCH (spark:Slides) where spark.name='Apache SPark'
MATCH (scala:Slides) where scala.name = 'Scala'
MATCH (mongoDB:Slides) where mongoDB.name = 'MongoDB'
// identifier les licences
MATCH (cc:Licence) where cc.name='CC'
MATCH (ccbync:Licence) where ccbync.name = 'CC BY-NC'
// créer les relations entre les documents et les licences
CREATE (spark)-[:Has_a]->(cc)
CREATE (scala)-[:Has_a]->(cc)
CREATE (mongoDB)-[:Has_a]->(ccbync)
// afficher le resultat
RETURN spark, scala, mongoDB, cc, ccbync
Créer 2 relations « Flow »
41
M.MICHRAFY
Vue graphe
Scala
MongoDB
Apache
SparkCC
BY-NC
CC
BY-NC
42. CRÉER LES RELATIONS : VISUALISER
L’objectif est d’enregistrer le nombre
de fois qu’un adhérent à visualiser un
document.
Si la personne visualise le document
pour la première fois, nous créons une
relation « View » entre l’adhérent et le
document et Views = 1. Si la relation
existe, nous incrémentons la propriété
Views par 1.
Pour cela, nous utilisons la clause
MERGE avec la clause ON CREATE.
Clause create
// identifier l’adherent ‘Roche Lara’
OPTIONAL MATCH (p:Adherent) where p.name = 'Roche Lara‘
// identifier le document ‘Scala’
OPTIONAL MATCH (s:Slides) where s.name = 'Scala‘
// Créer la relation Like si’il existe pas et fixer Views à 0
MERGE (p)-[r:View]->(s)
ON CREATE SET r.Views = 0
// Incrementer la value de Views par 1
Set r.Views = r.Views+ 1
// retourner,p,s
RETURN r,p,s
Créer une relation visualiser
42
M.MICHRAFY
Vue graphe
ScalaRoche
Lara
View
43. SUPPRIMER LA RELATION VISUALISER
Pour supprimer une relation, il faut
d’abord identifier les nœuds associées.
La clause DELETE permet de supprimer
une relation.
La clause REMOVE permet de
supprimer une propriété d’une relation
ou d’un nœud.
Pour supprimer un nœud, il nécessaire
de supprimer d’abord les relations
associées.
Clause create
// identifier l’adherent ‘Roche Lara’
MATCH (p:Adherent) where p.name = 'Roche Lara‘
// identifier le document ‘Scala’
MATCH (s:Slides) where s.name = 'Scala‘
// identifier la relation entre p et s
OPTIONAL MATCH (p)-[r:View]->(s)
// supprimer la relation r
delete r
Supprimer une relation
43
M.MICHRAFY
Sortie Deleted 1 relationship, statement completed in 5 ms.
44. CRÉER UN NŒUD STATISTIC ASSOCIÉ A CHAQUE DOCUMENT
La clause with joue le rôle d’un pipe.
La clause set permet de mettre à jour les propriétés.
Chaque nœud Slides est associé à un nœud
Statistic, le nom de la relation est stat_of.
Le nœud Statistic comporte les propriétés Views,
Downloads, Comments, Likes, Share.
Le processus est le suivant :
Pour nœud Slides
1. Créer un neoud Statistic
2. Créer une relation stat_of
3. Ajouter les propriétés au nœud Statistic.
Clause create, with et set
MATCH (p:Slides)
WITH p
CREATE (q:Statistic{name:'Statistic ' + p.name})
WITH p,q
CREATE (p)-[r:stat_of]->(q)
WITH p,q
SET q.Views=0
SET q.Downloads=0
SET q.Comments=0
SET q.Likes=0
SET q.Shares=0
RETURN p,q
Créer 3 nœuds Statistic et 3 elations « stat_of »
44
M.MICHRAFY
Vue graphe
Scala
MongoDB
Apache
Spark
Statistic
MongoDB
Statistic
Apache
Spark
Statistic
Scala
46. ENREGISTRER LA VISUALISATION D’UN DOCUMENT
// identifier le document : name = ‘Scala’
optional match (p:Slides) where p.name = 'Scala‘
// render p accessible pour la requête suivante
with p
// Chercher le voisin de p avec relation = stat_of
optional match (p)-[r:stat_of]->(q)
// Rendre q accessible pour la requête suivante
with q
Set q.Views= q.Views + 1
return q
Actualiser le nœud Statistic
46
M.MICHRAFY
Vue graphe
Statistic
Scala
Vue Rows
Views 1
Comments 0
name Statistic Scala
Downloads 0
Likes 0
Shares 0
L’objectif est de mette à jour les propriétés du
nœud Statistic suite à la lecture du document
Scala.
Cette mise à jour se fait via la clause SET
Le principe est le suivant :
Chercher le nœud en question
Chercher le voisin du nœud
Mettre à jour les propriètés
Clause create, with et set
47. IDENTIFIER LE DOCUMENT LE PLUS LU
// p est une variable de type Statistic
match (p:Statistic)
// Rendre le scalaire m visible pour la requete suivante
with max(p.Views) as m
// identifier le noeud respectant la condition
optional match (p:Slides)-[r:stat_of]->(q:Statistic)
where q.Views = m
// retourner les noeuds
return p
Identfier le nœud cible
47
M.MICHRAFY
Statistic
Scala
L’objectif est de retourner le
document le plus lu.
Le principe est le suivant :
Identifier les nœuds Statistic
Calculer m qui est le max des
Views
Identifier le nœud Slides dont le
nœud associé Statistic avec
Views=m
Retourner le nœud en question
Clause match, with
Vue graphe