SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
Institut National des Sciences Appliquées et de Technologie Tunisie
Big Data
2015-2016
TP5- NOSQL ORIENTE
GRAPHES AVEC NEO4J
Dr. Lilia SFAXI
Objectifs du TP : Se familiariser avec les bases de données NOSQL,
orientées graphes avec Neo4J.
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 2
I. Bases de Données orientées Graphes : Neo4J
I.1. Graphes
Formellement, un graphe est une collection de nœuds et d’arcs qui les
connectent. Les graphes représentent les entités sous forme de nœuds, et les
manières dont ces entités sont reliées sous forme d’arcs. Cette structure a
inspiré les bases de données orientées graphes, car elles permettent de
modéliser tous types de scénarios.
Par exemple, les relations entre les utilisateurs de Twitter peuvent être
représentées de manière simplifiée par le graphe suivant :
Un graphe peut représenter n’importe quel type de données.
- Un nœud est l’équivalent d’un enregistrement
- Une relation permet de relier des nœuds, et peut être typée
- Les nœuds et les relations peuvent avoir des propriétés, représentant
des attributs nommés
- Un label est un nom permettant d’organiser les nœuds en groupes
La base de données que nous allons utiliser dans ce TP est Neo4j1. Cette base
utilise le langage Cypher pour représenter les requêtes.
I.2. Exemple
L’exemple que nous allons montrer dans ce manuscrit est tiré du tutorial fourni
par Neo4j dans leur site sur ce lien: http://neo4j.com/graphacademy/online-
course/
1 Neo4J: http://neo4j.com/
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 3
Les données que nous traitons représentent :
- Les films avec un label :Movie et les propriétés title, released et tagline
- Les personnes avec un label :Person et des propriétés name et born
- Une relation ACTED_IN allant d’un acteur à un film, avec une propriété
roles contenant la liste des noms des caractères
- Une relation DIRECTED allant d’un réalisateur à un film.
Activité 1.
Commencer par installer Neo4J, avec le fichier executable fourni par votre
enseignante. Lancez le sur votre navigateur.
Créer la base de données Movies donnée comme exemple par l’outil en
suivant les étapes suivantes:
- Une fois authentifié et le mot de passe par défaut remplacé, choisir :
“Jump Into Code” pour commencer à développer.
- Cliquer sur « Create a Graph » de la rubrique « Movie Graph » comme
suit :
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 4
- Dans la fenêtre qui apparaît, cliquer sur le code de création du graphe
pour le charger dans l’éditeur. L’exécuter.
I.3. Le Langage Cypher
Nœuds
(a) Acteurs
(m) Films
( ) Noeud Anonyme
Relations
-[r]-> relation appelée r
(a) –[r]-> (m) acteurs ayant une relation r avec des films
-[:ACTED_IN]-> La relation est de type ACTED_IN
(a)-[:ACTED_IN]->(m) Les acteurs qui jouent dans un film
(d)-[:DIRECTED]->(m) Les réalisateurs d’un film
Propriétés des Nœuds
(m {title : "The Matrix"}) Film avec une propriété title
a
m
a m
a m
ACTED_IN
ACTED_IN
d mDIRECTED
ACTED_IN
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 5
(a {name: "Keanu Reeves", born : 1964}) Acteur avec des propriétés name
et born
Propriétés des Relations
(a)-[ :ACTED_IN {roles :[« Neo »]}]->(m) Relation ACTED_IN avec la
propriété roles, qui est un tableau
de noms
Labels : permettent de reconnaître différents types de noeuds
(a:Person)-[:ACTED_IN]->(m:Movie) Une personne qui a joué dans un
film
I.4. Requêtes Cipher
I.4.1. Requêtes de lecture simples
Voici des exemples de requêtes Cipher:
La première instruction permet de retourner la valeur de la propriété property
pour tous les nœuds. La seconde, retourne les valeurs de propertyA et
m
{title=”The Matrix”}
a
{name=”Keanu Reeves”, born=1964}
a m
ACTED_IN {roles:[“Neo”]}
a m
ACTED_IN
Person Movie
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 6
propertyB de chaque couple de nœuds node2 et node1 qui sont connectés
par une relation (quelle que soit sa nature).
Pour retourner seulement les nœuds connectés par une relation de type
REL_TYPE :
Si la relation en question comporte des propriétés qu’on désire lire, lui donner
un nom (ici rel) :
Pour indiquer un type particulier de nœuds, utiliser les labels :
Il est possible d’affecter un identifiant à une relation, puis retourner le type de
la relation, ou bien ses propriétés :
Pour étayer par un exemple, soit le graphe suivant :
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 7
La requête permettant de trouver tous les caractères du film The Matrix est la
suivante :
MATCH (movie :Movie)<-[role :ACTED_IN]-(actor :Person)
WHERE movie.title= « The Matrix »
RETURN role.roles, actor.name
Un autre moyen est également possible pour filtrer les données (à la place du
traditionnel WHERE), et ce remplaçant la requête précédente par :
MATCH (movie :Movie (title : « The Matrix »)<-[role :ACTED_IN]-(actor :Person)
RETURN role.roles, actor.name
Activité 2. Exécuter les requêtes suivantes dans votre éditeur:
- Donner tous les films où a joué Tom Hanks
- Donner la liste de tous les personnages de Matrix
- Donner pour chaque film sa date de sortie
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 8
I.4.2. Les Chemins (Paths)
Un chemin est un ensemble de nœuds connectés et de relations, pouvant
correspondre à un patron. Par exemple :
(a) --> (b) --> (c)
(a) --> (b) <-- (c)
Exemple : Pour afficher tous les acteurs et réalisateurs de tous les films :
MATCH (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d)
RETURN a.name, m.title, d.name
Il est possible également de diviser la requête en plusieurs chemins, comme
suit :
MATCH (a)-[ :ACTED_IN]->(m),
(m) <-[ :DIRECTED]-(d)
RETURN a.name, m.title, d.name
Ou bien :
MATCH (a)-[ :ACTED_IN]->(m),
(d)-[ :DIRECTED]->(m)
RETURN a.name, m.title, d.name
Les résultats des requêtes précédentes sont des tableaux.
Il est possible de retourner le chemin entier, avec toutes les propriétés de tous
les nœuds et relations concernés :
MATCH p = (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d)
RETURN p
Si cela représente trop d’informations, vous pouvez juste sélectionner les
nœuds du chemin :
MATCH p = (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d)
RETURN nodes(p)
… ou bien seulement les relations :
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 9
MATCH p = (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d)
RETURN rels(p)
Activité 3. Exécuter les requêtes suivantes dans votre éditeur:
- Quels réalisateurs ont joué dans leurs propres films ?
- Donner les films où Keanu Reeves a joué le rôle de Neo.
- Quels acteurs ont déjà joué dans un même film avec Tom Hanks, et
dans quel film ?
- Quels acteurs ont joué dans un même film avec Tom Hanks, et avec
Keanu Reeves ?
- Quels sont les personnages du film « The Matrix » ?
I.4.3. Éditer un graphe avec Cipher
Pour ajouter un nœud au graphe :
Pour ajouter (ou modifier) des propriétés à un nœud existant :
Pour ajouter une relation entre deux nœuds existants :
TP5 : NOSQL Orientées Graphes avec Neo4J
Page 10
Activité 4. Exécuter les requêtes suivantes dans votre éditeur:
- Créer un film appelé Mystic River
- Ajouter Kevin Bacon comme acteur dans le film « Mystic River » avec le
rôle « Sean »
- Modifier le rôle pour devenir « Sean Devine »

Contenu connexe

Tendances

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 NoSQLAntoine Augusti
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5Amal Abid
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture Lilia Sfaxi
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingLilia Sfaxi
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETLLilia Sfaxi
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence Yassine Badri
 
Base de données graphe et Neo4j
Base de données graphe et Neo4jBase de données graphe et Neo4j
Base de données graphe et Neo4jBoris Guarisma
 
Modélisation de données pour MongoDB
Modélisation de données pour MongoDBModélisation de données pour MongoDB
Modélisation de données pour MongoDBMongoDB
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6Amal Abid
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLwebreaker
 

Tendances (20)

Technologies pour le Big Data
Technologies pour le Big DataTechnologies pour le Big Data
Technologies pour le Big Data
 
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
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETL
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
Base de données graphe et Neo4j
Base de données graphe et Neo4jBase de données graphe et Neo4j
Base de données graphe et Neo4j
 
Modélisation de données pour MongoDB
Modélisation de données pour MongoDBModélisation de données pour MongoDB
Modélisation de données pour MongoDB
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
MongoDB.pptx
MongoDB.pptxMongoDB.pptx
MongoDB.pptx
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Td dw1
Td dw1Td dw1
Td dw1
 

En vedette

BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
Business Intelligence
Business IntelligenceBusiness Intelligence
Business IntelligenceLilia Sfaxi
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design PatternsLilia Sfaxi
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScriptLilia Sfaxi
 
Introduction au Web
Introduction au WebIntroduction au Web
Introduction au WebLilia Sfaxi
 
Mobile developement
Mobile developementMobile developement
Mobile developementLilia Sfaxi
 
Server-side JS with NodeJS
Server-side JS with NodeJSServer-side JS with NodeJS
Server-side JS with NodeJSLilia Sfaxi
 

En vedette (12)

BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Thinking BIG
Thinking BIGThinking BIG
Thinking BIG
 
Business Intelligence
Business IntelligenceBusiness Intelligence
Business Intelligence
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
Angular
AngularAngular
Angular
 
Testing Angular
Testing AngularTesting Angular
Testing Angular
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScript
 
Introduction au Web
Introduction au WebIntroduction au Web
Introduction au Web
 
Core JavaScript
Core JavaScriptCore JavaScript
Core JavaScript
 
Mobile developement
Mobile developementMobile developement
Mobile developement
 
Server-side JS with NodeJS
Server-side JS with NodeJSServer-side JS with NodeJS
Server-side JS with NodeJS
 
Thinking big
Thinking bigThinking big
Thinking big
 

Similaire à BigData_TP5 : Neo4J

Similaire à BigData_TP5 : Neo4J (20)

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
 
Réseaux avec NetLogo
Réseaux avec NetLogoRéseaux avec NetLogo
Réseaux avec NetLogo
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
 
004 support tp-xquery
004 support tp-xquery004 support tp-xquery
004 support tp-xquery
 
Dijkstra kshortest
Dijkstra kshortestDijkstra kshortest
Dijkstra kshortest
 
Activity
ActivityActivity
Activity
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec R
 
ACSI.pptx
ACSI.pptxACSI.pptx
ACSI.pptx
 
Cours3 gdm sql
Cours3 gdm sqlCours3 gdm sql
Cours3 gdm sql
 
Cours 01.pptx
Cours 01.pptxCours 01.pptx
Cours 01.pptx
 
Initiation à l'analyse de réseaux - formation fmr - séance 1
Initiation à l'analyse de réseaux - formation fmr - séance 1Initiation à l'analyse de réseaux - formation fmr - séance 1
Initiation à l'analyse de réseaux - formation fmr - séance 1
 
Initiation r
Initiation rInitiation r
Initiation r
 
Analyse statistique sur DOTA
Analyse statistique sur DOTAAnalyse statistique sur DOTA
Analyse statistique sur DOTA
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
D3 js-last
D3 js-lastD3 js-last
D3 js-last
 
xml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptxml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.ppt
 
Neo4j
Neo4jNeo4j
Neo4j
 
5 sw
5 sw5 sw
5 sw
 
Adopte une BDD
Adopte une BDDAdopte une BDD
Adopte une BDD
 
Rapport panama papers
Rapport panama papersRapport panama papers
Rapport panama papers
 

Plus de Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correctionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 

Plus de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 

BigData_TP5 : Neo4J

  • 1. Institut National des Sciences Appliquées et de Technologie Tunisie Big Data 2015-2016 TP5- NOSQL ORIENTE GRAPHES AVEC NEO4J Dr. Lilia SFAXI Objectifs du TP : Se familiariser avec les bases de données NOSQL, orientées graphes avec Neo4J.
  • 2. TP5 : NOSQL Orientées Graphes avec Neo4J Page 2 I. Bases de Données orientées Graphes : Neo4J I.1. Graphes Formellement, un graphe est une collection de nœuds et d’arcs qui les connectent. Les graphes représentent les entités sous forme de nœuds, et les manières dont ces entités sont reliées sous forme d’arcs. Cette structure a inspiré les bases de données orientées graphes, car elles permettent de modéliser tous types de scénarios. Par exemple, les relations entre les utilisateurs de Twitter peuvent être représentées de manière simplifiée par le graphe suivant : Un graphe peut représenter n’importe quel type de données. - Un nœud est l’équivalent d’un enregistrement - Une relation permet de relier des nœuds, et peut être typée - Les nœuds et les relations peuvent avoir des propriétés, représentant des attributs nommés - Un label est un nom permettant d’organiser les nœuds en groupes La base de données que nous allons utiliser dans ce TP est Neo4j1. Cette base utilise le langage Cypher pour représenter les requêtes. I.2. Exemple L’exemple que nous allons montrer dans ce manuscrit est tiré du tutorial fourni par Neo4j dans leur site sur ce lien: http://neo4j.com/graphacademy/online- course/ 1 Neo4J: http://neo4j.com/
  • 3. TP5 : NOSQL Orientées Graphes avec Neo4J Page 3 Les données que nous traitons représentent : - Les films avec un label :Movie et les propriétés title, released et tagline - Les personnes avec un label :Person et des propriétés name et born - Une relation ACTED_IN allant d’un acteur à un film, avec une propriété roles contenant la liste des noms des caractères - Une relation DIRECTED allant d’un réalisateur à un film. Activité 1. Commencer par installer Neo4J, avec le fichier executable fourni par votre enseignante. Lancez le sur votre navigateur. Créer la base de données Movies donnée comme exemple par l’outil en suivant les étapes suivantes: - Une fois authentifié et le mot de passe par défaut remplacé, choisir : “Jump Into Code” pour commencer à développer. - Cliquer sur « Create a Graph » de la rubrique « Movie Graph » comme suit :
  • 4. TP5 : NOSQL Orientées Graphes avec Neo4J Page 4 - Dans la fenêtre qui apparaît, cliquer sur le code de création du graphe pour le charger dans l’éditeur. L’exécuter. I.3. Le Langage Cypher Nœuds (a) Acteurs (m) Films ( ) Noeud Anonyme Relations -[r]-> relation appelée r (a) –[r]-> (m) acteurs ayant une relation r avec des films -[:ACTED_IN]-> La relation est de type ACTED_IN (a)-[:ACTED_IN]->(m) Les acteurs qui jouent dans un film (d)-[:DIRECTED]->(m) Les réalisateurs d’un film Propriétés des Nœuds (m {title : "The Matrix"}) Film avec une propriété title a m a m a m ACTED_IN ACTED_IN d mDIRECTED ACTED_IN
  • 5. TP5 : NOSQL Orientées Graphes avec Neo4J Page 5 (a {name: "Keanu Reeves", born : 1964}) Acteur avec des propriétés name et born Propriétés des Relations (a)-[ :ACTED_IN {roles :[« Neo »]}]->(m) Relation ACTED_IN avec la propriété roles, qui est un tableau de noms Labels : permettent de reconnaître différents types de noeuds (a:Person)-[:ACTED_IN]->(m:Movie) Une personne qui a joué dans un film I.4. Requêtes Cipher I.4.1. Requêtes de lecture simples Voici des exemples de requêtes Cipher: La première instruction permet de retourner la valeur de la propriété property pour tous les nœuds. La seconde, retourne les valeurs de propertyA et m {title=”The Matrix”} a {name=”Keanu Reeves”, born=1964} a m ACTED_IN {roles:[“Neo”]} a m ACTED_IN Person Movie
  • 6. TP5 : NOSQL Orientées Graphes avec Neo4J Page 6 propertyB de chaque couple de nœuds node2 et node1 qui sont connectés par une relation (quelle que soit sa nature). Pour retourner seulement les nœuds connectés par une relation de type REL_TYPE : Si la relation en question comporte des propriétés qu’on désire lire, lui donner un nom (ici rel) : Pour indiquer un type particulier de nœuds, utiliser les labels : Il est possible d’affecter un identifiant à une relation, puis retourner le type de la relation, ou bien ses propriétés : Pour étayer par un exemple, soit le graphe suivant :
  • 7. TP5 : NOSQL Orientées Graphes avec Neo4J Page 7 La requête permettant de trouver tous les caractères du film The Matrix est la suivante : MATCH (movie :Movie)<-[role :ACTED_IN]-(actor :Person) WHERE movie.title= « The Matrix » RETURN role.roles, actor.name Un autre moyen est également possible pour filtrer les données (à la place du traditionnel WHERE), et ce remplaçant la requête précédente par : MATCH (movie :Movie (title : « The Matrix »)<-[role :ACTED_IN]-(actor :Person) RETURN role.roles, actor.name Activité 2. Exécuter les requêtes suivantes dans votre éditeur: - Donner tous les films où a joué Tom Hanks - Donner la liste de tous les personnages de Matrix - Donner pour chaque film sa date de sortie
  • 8. TP5 : NOSQL Orientées Graphes avec Neo4J Page 8 I.4.2. Les Chemins (Paths) Un chemin est un ensemble de nœuds connectés et de relations, pouvant correspondre à un patron. Par exemple : (a) --> (b) --> (c) (a) --> (b) <-- (c) Exemple : Pour afficher tous les acteurs et réalisateurs de tous les films : MATCH (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d) RETURN a.name, m.title, d.name Il est possible également de diviser la requête en plusieurs chemins, comme suit : MATCH (a)-[ :ACTED_IN]->(m), (m) <-[ :DIRECTED]-(d) RETURN a.name, m.title, d.name Ou bien : MATCH (a)-[ :ACTED_IN]->(m), (d)-[ :DIRECTED]->(m) RETURN a.name, m.title, d.name Les résultats des requêtes précédentes sont des tableaux. Il est possible de retourner le chemin entier, avec toutes les propriétés de tous les nœuds et relations concernés : MATCH p = (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d) RETURN p Si cela représente trop d’informations, vous pouvez juste sélectionner les nœuds du chemin : MATCH p = (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d) RETURN nodes(p) … ou bien seulement les relations :
  • 9. TP5 : NOSQL Orientées Graphes avec Neo4J Page 9 MATCH p = (a)-[ :ACTED_IN]->(m)<-[ :DIRECTED]-(d) RETURN rels(p) Activité 3. Exécuter les requêtes suivantes dans votre éditeur: - Quels réalisateurs ont joué dans leurs propres films ? - Donner les films où Keanu Reeves a joué le rôle de Neo. - Quels acteurs ont déjà joué dans un même film avec Tom Hanks, et dans quel film ? - Quels acteurs ont joué dans un même film avec Tom Hanks, et avec Keanu Reeves ? - Quels sont les personnages du film « The Matrix » ? I.4.3. Éditer un graphe avec Cipher Pour ajouter un nœud au graphe : Pour ajouter (ou modifier) des propriétés à un nœud existant : Pour ajouter une relation entre deux nœuds existants :
  • 10. TP5 : NOSQL Orientées Graphes avec Neo4J Page 10 Activité 4. Exécuter les requêtes suivantes dans votre éditeur: - Créer un film appelé Mystic River - Ajouter Kevin Bacon comme acteur dans le film « Mystic River » avec le rôle « Sean » - Modifier le rôle pour devenir « Sean Devine »