2. Des relations
Vous l’avez compris, on collecte de plus en plus de
données
Ces données ne vivent pas isolées, elles sont reliées
entre elles
Il s’agit donc de modéliser (représenter) dans la base
de relations telles que :
Pierre a acheté une 205
Deux entités
Une relation
2
3. Avec une base « classique » 3
En rouge les personnes (1 table)
En bleu les véhicules (1 table)
En jaune les relations entre les deux tables (qui est aussi une table)
4. Avec une base « classique »
Plus le nombre d’entités à lier augmente, plus le
nombre de tables intermédiaires augmente
L’opération de mise en relation est le JOIN
Plus les tables augmentent en taille, plus la requête
est lente (c’est presque le produit cartésien des
tables) -> pas forcément adapté au big data
Les schémas sont figés
Avantage : on ne peut pas faire n’importe quoi
Inconvénient : on ne peut pas faire de que l’on veut
4
5. Base graphe
Modélise, stocke requête des données connectées
Nos dessins au tableau deviennent le modèle
5
6. Quand utiliser une base graphe ?
Les données sont dynamiques
Les données sont connectées
Le schéma est flexible
Le schéma est complexe
On a besoin des réponses en temps réel
6
10. Noeuds 10
Représente une entité qui peut être complexe
Possède des propriétés
Un label (ou plusieurs) qui permet de différencier les nœuds (personne, pays, …)
Représente les attributs de l’entité
Ou des métadonnées (dates, …)
Des paires clef/valeur
Chaque nœud peut posséder des propriétés différentes de celles d’un
autre nœud
En valeur
En nature
11. Relations 11
Chaque relation possède deux principaux attributs
Un nom
Un sens
Une relation peut porter des propriétés
Chaque relation possède un nœud de départ et un nœud d’arrivée
Pas de relations « pendantes »
12. Relations 12
Nom :
Pierre
Nom :
Sam
Nom :
Paul
Nom :
Lucy
Est ami de
Est ami de
Est ami de
Nom :
Pierre
Est voisin de
Nom :
Paul
Est ami de
Nom :
Pierre
S’est proposé
13. Le langage : Cypher 13
Personne Personne
Est ami de
(:Personne)-[:EST_AMI_DE]->(:Personne)
17. Construction d’un modèle 17
Une question concrète
Quelle personnes travaillant dans la même entreprise que moi ont les mêmes
compétences ?
On identifies les entités
Quelle personnes travaillant dans la même entreprise que moi ont les mêmes
compétences ?
On identifies les relations
Personne TRAVAILLE_POUR entreprise
Personne POSSEDE compétence
La structure
(:Personne)-[:TRAVAILLE_POUR]->(:Entreprise)
(:Personne)->[:POSSEDE]->(:Compétence)
18. Schéma global 18
(:Personne)-[:TRAVAILLE_POUR]->(:Entreprise)
(:Personne)->[:POSSEDE]->(:Compétence)
(:Entreprise)<-[:TRAVAILLE_POUR]-(:Personne)-[:POSSEDE]->(:Compétence)
19. La requête 19
MATCH (entreprise)<-[:TRAVAILLE_POUR]-(:Personne{nom:patrick})
-[:POSSEDE]->(competence),
(entreprise)<-[TRAVAILLE_POUR]-(college)-[:POSSEDE]->(COMPETENCE)
RETURN college.nom AS nom,
COUNT(competence) AS score
COLLECT(competence.nom) AS compétences
GROUP BY score DESC
20. Qui a les mêmes compétences que
patrick ?
20
MATCH (entreprise)<-[:TRAVAILLE_POUR]-(:Personne{nom:patrick})
-[:POSSEDE]->(competence),
(entreprise)<-[TRAVAILLE_POUR]-(college)-[:POSSEDE]->(COMPETENCE)