SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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.
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
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
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
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
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
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
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.
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
CAS D’USAGE : MODÈLE DE DONNÉES
30
Person Person
Slides
Follow
Licence
Domain
Category of
Like
Person
View
Has a
Person
Comment
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
VISUALISER LES DONNÉES
45
// afficher le graphe des données
Match (p) return p
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
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
DR MUSTAPHA MICHRAFY
CONTACT : DATASCIENCE.KM@GMAIL.COM

Contenu connexe

Tendances

Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
ebiznext
 

Tendances (20)

BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Quand utiliser MongoDB … Et quand vous en passer…
Quand utiliser MongoDB	… Et quand vous en passer…Quand utiliser MongoDB	… Et quand vous en passer…
Quand utiliser MongoDB … Et quand vous en passer…
 
Neo4j Presentation
Neo4j PresentationNeo4j Presentation
Neo4j Presentation
 
Graphes de connaissances avec Neo4j
Graphes de connaissances avec Neo4j Graphes de connaissances avec Neo4j
Graphes de connaissances avec Neo4j
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQL
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Intro to Cypher
Intro to CypherIntro to Cypher
Intro to Cypher
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Intro to Neo4j presentation
Intro to Neo4j presentationIntro to Neo4j presentation
Intro to Neo4j presentation
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 

En vedette

Le statut des données de la recherche : entre droit des bases de données et d...
Le statut des données de la recherche : entre droit des bases de données et d...Le statut des données de la recherche : entre droit des bases de données et d...
Le statut des données de la recherche : entre droit des bases de données et d...
Calimaq S.I.Lex
 
Introduction to Data Warehousing
Introduction to Data WarehousingIntroduction to Data Warehousing
Introduction to Data Warehousing
Edureka!
 

En vedette (20)

Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctions
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & Actions
 
Scala: Pattern matching, Concepts and Implementations
Scala: Pattern matching, Concepts and ImplementationsScala: Pattern matching, Concepts and Implementations
Scala: Pattern matching, Concepts and Implementations
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Apache SPARK ML : principes, concepts et mise en œuvre
Apache SPARK  ML : principes, concepts et  mise en œuvre Apache SPARK  ML : principes, concepts et  mise en œuvre
Apache SPARK ML : principes, concepts et mise en œuvre
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Introduction à l’étude des grands graphes
Introduction à l’étude des grands graphesIntroduction à l’étude des grands graphes
Introduction à l’étude des grands graphes
 
spark_intro_1208
spark_intro_1208spark_intro_1208
spark_intro_1208
 
Longueur de branches et arbres de mots
Longueur de branches et arbres de motsLongueur de branches et arbres de mots
Longueur de branches et arbres de mots
 
Analyse de textes avec TreeCloud et Lexico3
Analyse de textes avec TreeCloud et Lexico3Analyse de textes avec TreeCloud et Lexico3
Analyse de textes avec TreeCloud et Lexico3
 
0712_Seigneurin
0712_Seigneurin0712_Seigneurin
0712_Seigneurin
 
NoSql : conception des schémas, requêtage, et optimisation
NoSql : conception des schémas, requêtage, et optimisationNoSql : conception des schémas, requêtage, et optimisation
NoSql : conception des schémas, requêtage, et optimisation
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)
 
Neo4j au secours de l'Internet of Connected Things
Neo4j au secours de l'Internet of Connected ThingsNeo4j au secours de l'Internet of Connected Things
Neo4j au secours de l'Internet of Connected Things
 
Le statut des données de la recherche : entre droit des bases de données et d...
Le statut des données de la recherche : entre droit des bases de données et d...Le statut des données de la recherche : entre droit des bases de données et d...
Le statut des données de la recherche : entre droit des bases de données et d...
 
Introduction to Data Warehousing
Introduction to Data WarehousingIntroduction to Data Warehousing
Introduction to Data Warehousing
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
 
Lessons Learned: Using Spark and Microservices
Lessons Learned: Using Spark and MicroservicesLessons Learned: Using Spark and Microservices
Lessons Learned: Using Spark and Microservices
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclair
 
Les systèmes de représentations sensorielles de la PNL
Les systèmes de représentations sensorielles de la PNLLes systèmes de représentations sensorielles de la PNL
Les systèmes de représentations sensorielles de la PNL
 

Similaire à Base de données graphe, Noe4j concepts et mise en oeuvre

La caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informationsLa caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informations
ChristopheTricot
 
Architectures réparties en environnement web
Architectures réparties en environnement webArchitectures réparties en environnement web
Architectures réparties en environnement web
Amaury Bouchard
 

Similaire à Base de données graphe, Noe4j concepts et mise en oeuvre (20)

Serveur web / Base de donnees Langages de développement
Serveur web / Base de donnees Langages de développementServeur web / Base de donnees Langages de développement
Serveur web / Base de donnees Langages de développement
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
 
Neo4j
Neo4jNeo4j
Neo4j
 
Partie 5 - Neo4j.pdf bd nosql oriente graphe
Partie 5 - Neo4j.pdf bd nosql oriente graphePartie 5 - Neo4j.pdf bd nosql oriente graphe
Partie 5 - Neo4j.pdf bd nosql oriente graphe
 
Bases de données no sql.pdf
Bases de données no sql.pdfBases de données no sql.pdf
Bases de données no sql.pdf
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
 
cours06-nosql.pdf
cours06-nosql.pdfcours06-nosql.pdf
cours06-nosql.pdf
 
Hadoop Graph Analysis par Thomas Vial
Hadoop Graph Analysis par Thomas VialHadoop Graph Analysis par Thomas Vial
Hadoop Graph Analysis par Thomas Vial
 
NoSQL panorama - Jean Seiler Softeam
NoSQL panorama - Jean Seiler SofteamNoSQL panorama - Jean Seiler Softeam
NoSQL panorama - Jean Seiler Softeam
 
La caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informationsLa caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informations
 
11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net
 
Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoTBenchmarking NoSQL DataBase dans le cadre d'un projet IoT
Benchmarking NoSQL DataBase dans le cadre d'un projet IoT
 
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICNoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Exploration graphique des bases Nosql.pptx
Exploration graphique des bases Nosql.pptxExploration graphique des bases Nosql.pptx
Exploration graphique des bases Nosql.pptx
 
Hajer mhimdi-ppt11 pfe-mr2 siw
Hajer mhimdi-ppt11 pfe-mr2 siwHajer mhimdi-ppt11 pfe-mr2 siw
Hajer mhimdi-ppt11 pfe-mr2 siw
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB Administration
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 
Architectures réparties en environnement web
Architectures réparties en environnement webArchitectures réparties en environnement web
Architectures réparties en environnement web
 
Présentation des bases de données NoSql
Présentation des bases de données NoSqlPrésentation des bases de données NoSql
Présentation des bases de données NoSql
 

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
  • 45. VISUALISER LES DONNÉES 45 // afficher le graphe des données Match (p) return p
  • 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
  • 48. DR MUSTAPHA MICHRAFY CONTACT : DATASCIENCE.KM@GMAIL.COM