0% ont trouvé ce document utile (0 vote)
21 vues71 pages

SQLNoSQLNewSQL Graphe

Transféré par

stevenguillaume509
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues71 pages

SQLNoSQLNewSQL Graphe

Transféré par

stevenguillaume509
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Modèle graphes

▪ Principes
▪ Neo4j
▪ OrientDB
▪ Graphes et Bases de Données Relationnelles

©Maude Manouvrier - Univ. Paris-Dauphine 510


Base de données graphes
▪ Graphe : représentation d’un réseau
▪ Graphe : ensemble de nœuds et d’arêtes
▪ Nœud : représentation d’une entité avec des propriétés
▪ Arête : directionnelle avec des propriétés
▪ Exemples de graphes :
• Réseaux sociaux
• Métro

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de de [Link]/rchiky/nosql/[Link] et de [Link] 511


Base de données graphes : exemples
▪ Nœud ou sommet (node, vertex)
▪ Arête ou relation (relationship, edge), avec une
orientation et un type (orienté et marqué)
▪ Propriété ou attribut (property, attribute), portée par
un nœud ou une relation

©Maude Manouvrier - Univ. Paris Dauphine – Figures reprises de [Link] 512


Base de données graphes : cas d’utilisation
▪ Cas d’utilisation : Domaine riche en liens entre des entités (cf.
[Link] )

• Applications avec des données connectées


• Applications de routage ou basées sur la localisation
• Moteurs de recommandation
• Business Intelligence
▪ Non applicable aux:
• Applications avec des forts besoins de mises à jour
• Données non interconnectés

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link]/rchiky/nosql/[Link] et de [Link] 513


Base de données graphes vs relationnel (1/3)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 514


Base de données graphes vs relationnel (2/3)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 515


Base de données graphes vs relationnel (3/3)
Bases de données graphes : index-free adjacency

Chaque nœud ~ un micro index des nœuds


voisins

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] et du cours de M. Rukoz à Nanterre 516
Base de données graphes : index-free adjacency

▪ Maintien pour chaque nœud des références directes vers ses nœuds
adjacents

▪ Temps de requêtes généralement indépendantes de la taille totale du graphe


et proportionnel à la taille du graphe recherché

▪ En relationnel : jointures bidirectionnelles précalculées et stockées dans la


base de données

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] et du cours de M. Rukoz à Nanterre/ 517
Classement des moteurs orientés graphe

©Maude Manouvrier - Univ. Paris-Dauphine - [Link] 51


Neo4j
▪ Système de gestion de graphes par Neo Technology, Inc
▪ Interrogation de la base avec un langage à travers HTTP : Cypher
Query Language
▪ Développé en Java et Scala
▪ Existe depuis 2000
▪ Peut fonctionner en stand-alone ou en temps que serveur web

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] et [Link] 519


Neo4j : liens utiles
▪ Site officiel : [Link]
▪ Pour tester en ligne (mais en s’identifiant) : [Link]
▪ Console en ligne : [Link]
▪ Documentation : : [Link]
▪ Exemples d’application :
• [Link]

• Gestion du tour de France : [Link]


2014-in-a-neo4j-graph-database

▪ Tutoriels :
• [Link]
• [Link]
• [Link]
©Maude Manouvrier - Univ. Paris Dauphine
520
Neo4j : modèle de données
▪ Nœud : unité fondamentale d’un graphe, pouvant être associé à des
labels (~type) et avoir des propriétés
▪ Relation : connexion entre deux nœuds avec une direction, pouvant
avoir des propriétés
▪ Propriété des nœuds et relations : paires clé-valeur avec des valeurs
de type nombre, chaine de caractères, booléen et listes
▪ Traversée d’un graphe : réponse à une requête (navigation de nœud
en nœud exprimée en Cypher)
▪ Chemin : séquence de nœuds avec des relations (utilisé comme
résultat d’une requête)
©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 521
Neo4j : exemple de graphe

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 522


Neo4j : Langage Cypher
▪ Deux clauses principales en Cypher pour construire des requêtes
• CREATE pour créer une nouvelle entité
• MATCH pour chercher/récupérer des entités
▪ Représentation graphique des entités :
• Nœud représenté entre parenthèses et deux-points pour label
• Relation représentée avec flèches/tirets et crochets pour détails
• Propriétés représentées par un dictionnaire à la JSON
▪ Manuel Cypher : [Link]
▪ Exemples de commandes : [Link]
the-first-steps-in-the-graph-world-with-the-regesta-of-emperor-frederick-iii
©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 523
Neo4j : création d’un nœud
Nom de variable non obligatoire

Les nœuds d’un même label n’ont pas


forcement la même structure :

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 524


Neo4j : création d’une relation

Inutile de créer un arc dans les 2 sens, lors des requêtes


le sens des arcs peut être omis.

Autre manière d’écrire l’instruction :

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 525


Neo4j : création d’un graphe

©Maude Manouvrier - Univ. Paris Dauphine Adapté de [Link] 526


Neo4j : CREATE

Attention : rien n’empêche de créer plusieurs fois le « même » nœud.

©Maude Manouvrier - Univ. Paris Dauphine Adapté de [Link] 527


Neo4j : Créer des nœuds à partir d’un fichier csv
(1/2)

id label
Extrait du contenu du fichier csv dede Dédé
[Link]
tathan Tathan

joinville Joinville

marcel Marcel

lecteur Le Lecteur
©Maude Manouvrier - Univ. Paris Dauphine Adapté de [Link] 528
Neo4j : Créer un graphe à partir d’un fichier csv (2/2)
LOAD CSV WITH HEADERS FROM "[Link]
france-2014/master/[Link]" AS csvLine
MERGE (r:Race { id: toInt(csvLine.RACE_ID), name: csvLine.RACE_NAME, from:
csvLine.RACE_FROM, to: csvLine.RACE_TO, edition: csvLine.RACE_EDITION, distance:
csvLine.RACE_DISTANCE, number_of_stages: csvLine.RACE_NUMBER_OF_STAGES, website:
csvLine.RACE_WEBSITE })
MERGE (t:Team { id: toInt(csvLine.TEAM_ID), name: csvLine.TEAM_NAME, country:
csvLine.TEAM_COUNTRY, sportingDirectors: csvLine.TEAM_MANAGERS })
MERGE (p:Rider { name: csvLine.RIDER_NAME, country: csvLine.RIDER_COUNTRY })
CREATE (t)-[:TAKES_PART_IN]->(r)<-[:TAKES_PART_IN { number:
toInt(csvLine.RIDER_NUMBER), info: csvLine.RIDER_INFO }]-(p), (p)-[:RIDES_FOR {
year: toInt(csvLine.RACE_YEAR) }]->(t);

Pour voir le contenu du fichier :


[Link]
-de-france-2014/master/tour-de-france-2014-
[Link]

©Maude Manouvrier - Univ. Paris Dauphine Adapté [Link] 529


Neo4j : recherche de nœuds

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 530


Neo4j : CREATE et MATCH (1/2)

Attention si vous avez plusieurs nœuds répondant au MATCH

©Maude Manouvrier - Univ. Paris Dauphine 531


Neo4j : CREATE et MATCH (2/2)

©Maude Manouvrier - Univ. Paris Dauphine 532


Neo4j : CREATE et MERGE (1/2)
Si on réitère ces instructions on peut
créer plusieurs nœuds « identiques »

MERGE récupère un nœud s’il


existe déjà et le crée sinon

©Maude Manouvrier - Univ. Paris Dauphine Adapté de [Link] 533


Neo4j : CREATE et MERGE (2/2)

MERGE récupère un nœud s’il existe ( ~MATCH) ou le


crée s’il n’existe pas (~CREATE)

©Maude Manouvrier - Univ. Paris Dauphine Adapté de [Link] 534


Neo4j : recherche de nœuds / sous-graphes (1/2)

©Maude Manouvrier - Univ. Paris Dauphine – Adapté de [Link] 535


Neo4j : mise à jour de nœuds / sous-graphes (2/2)

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 536


Neo4j : requêtes complexes

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 537


Neo4j : supprimer un nœud sans relation (1/2)

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 538


Neo4j : supprimer un nœud sans relation (2/2)
Pour supprimer tous les nœuds d’un même label :

Erreur si les nœuds sont liés à d’autres :

©Maude Manouvrier - Univ. Paris Dauphine 539


Neo4j : supprimer un nœud avec relation

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 540


Neo4j : comparaison SQL / Cypher

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 541


Neo4j : exemple d’union en SQL

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 542


Neo4j : plan d’exécution de l’union en
SQL

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 543


Neo4j : la même requête Cypher

▪ Recherche par label


▪ Filtrage de recherche de la personne ayant pour prénom
"jak" appliqué directement (filtrage au plus tôt)
▪ Extension avec les nœuds associés par la relation
FRIENDS

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 544


Neo4j : architecture Maitre-esclave à 2 composants

▪ HA Database: pour
le stockage et la
recherche des
données
▪ Cluster Manager :
pour la tolérance aux
pannes

©Maude Manouvrier - Univ. Paris Dauphine - Repris de ttps://[Link]/book/big_data_and_business_intelligence/9781783555178/7/ch07lvl1sec44/neo4j-architecture-and-advanced-settings 545


Neo4j : Composition d’un noeud

read-committed isolation level

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 546


Neo4j : conclusion
▪ Langage Cypher
▪ Gestion de transactions ACID
▪ Bien adapté aux requêtes de type « parcours de graphe »

▪ Perte en performance en raison de l’implémentation sous-jacente


▪ Modélisation pensée pour les graphes
▪ Non adapté aux requêtes de type « opération sur ensembles »

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link]/rchiky/nosql/[Link] et de [Link] 547


Exemple
d’applications
polyglottes
utilisant
Redis,
MondoDB et
Neo4j

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link]


548
OrientDB
▪ Base de données multi-modèles : graphes, documents, clé-valeur et
objets
▪ Créé en 2010 par CallidusCloud
▪ Développé en Java
▪ Association des points forts tirés des bases de données graphes et des
bases de données orientée document
▪ Langage de requête « à la SQL »

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] et [Link] 549


OrientDB : liens utiles

▪ Site officiel : [Link]


▪ Documentation : : [Link]

▪ Tutoriels :
• [Link]
[Link]

• [Link]

©Maude Manouvrier - Univ. Paris Dauphine 550


OrientDB : modèle de données
▪ Notion de classes pour représenter des enregistrements
▪ Partition des classes en clusters
▪ Relations entre les classes
• LINK pointe vers un objet
• LINKSET pointe vers plusieurs objets (ensemble)
• LINKLIST pointe vers plusieurs objets (liste)
• LINKMAP pointe vers plusieurs objets (dictionnaire)
▪ Possibilité de stocker des graphes avec des classes particulières

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 551


OrientDB : classe Document et classe Graphe

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 552


OrientDB : classe clé-valeur et classe objet

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 553


OrientDB : exemple de graphe

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 554


OrientDB : création de classe et d’attribut
▪ Création d’une nouvelle classe : CREATE CLASS
▪ Ajout éventuel de propriété : CREATE PROPERTY

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 555


OrientDB : insertion
▪ Insertion d’un nouvel enregistrement : INSERT INTO

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 556


OrientDB : rechercher des informations

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 557


OrientDB : créer un graphe (1/2)

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 558


OrientDB : créer un graphe (2/2)

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 559


OrientDB : interrogation en SQL ou parcours de graphe

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link] 560


OrientDB : architecture (1/2)
Avant 2012 : architecture Maître-Esclave

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 561


OrientDB : architecture (2/2)
Depuis 2012 : architecture Multi-Maîtres ("master-less") avec
partitionnement des données en cluster

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 562


OrientDB : réplication
Possibilité de réplication :

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 563


OrientDB : exécution d’une requête

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 564


OrientDB : WriteQuorum

©Maude Manouvrier - Univ. Paris Dauphine – Repris de [Link] 565


OrientDB : conclusion
▪ Langage de requête et traversée de graphe
▪ Transactions ACID
▪ Architecture multi-master
▪ Multi-Modèles

▪ Monitoring, gestion des sauvegardes sous licence commerciale


▪ Multi-Modèles

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 566


Graphes et Base de Données Relationnelles
Possibilité de simuler un graphe via des requêtes récursives :

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 567


Requête SQL récursive

src dest path src dest path


1 2 [1,2] 2 5 [2,3,5]
2 3 [2,3] 2 1 [2,4,1]
2 4 [2,4] 3 1 [3,4,1]
3 4 [3,4] 3 2 [3,4,1,2]
4 1 [4,1] 4 3 [4,1,2,3]
3 5 [3,5] 1 4 [1,2,3,4]
4 2 [4,1,2] 1 5 [1,2,3,5]
1 3 [1,2,3] 2 1 [2,3,4,1]
1 4 [1,2,4] 4 5 [4,1,2,3,5]
2 4 [2,3,4]

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 568


Clause SQL WITH RECURSIVE
Pour faire des itérations
La requête faisant
WITH RECURSIVE R AS ( référence à R doit
requeteDeBase ! finir par ne
UNION ALL retourner aucun
requeteFaisantReferenceàR nuplet pour
) arrêter la boucle !
SELECT ... FROM R

Exemple : requête, qui


calcule la somme des
nombres de 1 à 100

©Maude Manouvrier - Univ. Paris Dauphine – cf. [Link] 569


Fonctionnement de la clause WITH RECURSIVE

©Maude Manouvrier - Univ. Paris Dauphine – Figure reprise de [Link] 570


Simuler un Graphe dans une Base de Données Relationnelles

Exemples :
▪ [Link]
▪ [Link]
7842b8075ca8
▪ [Link]
and-topological-sort-with-postgres/620/
▪ [Link]
▪ [Link]
scale-graph-with-millisecond-response_595039

©Maude Manouvrier - Univ. Paris Dauphine 571


Plusieurs implémentation et extensions du langage Cypher (1/2)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 572


Plusieurs implémentation et extensions du langage Cypher (2/2)

RPQs (Regular
path queries)

LDBC (Linked Data Benchmark Council)


©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 573
Extension du standard SQL pour les graphes

(Graph Query
Language)

(SQL Property Graph Querying)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link]


[Link] , [Link] et
[Link] 574
Property Graph Queries (SQL/PGQ)
▪ Extension du standard SQL aux graphes – SQL:2023 :
[Link]

©Maude Manouvrier - Univ. Paris Dauphine – Exemple repris de [Link] 575


Property Graph Query Language (PGQL) d’Oracle
▪ Description : [Link]
▪ Projet Open-source d’Oracle : [Link]
▪ Langage de la base de données Graphe d’Oracle, Oracle’s Graph Database :
[Link]
▪ Dernière spécification en août 2022 : [Link]

©Maude Manouvrier - Univ. Paris Dauphine – Images reprises de [Link]


[Link] 576
Exemple sous PGQL d’Oracle

©Maude Manouvrier - Univ. Paris Dauphine – Images reprises de [Link] 577


Graph Query Language (GQL)
▪ Page web officielle : [Link]
▪ Page web avec des liens : [Link]
pgq-pointers

©Maude Manouvrier - Univ. Paris Dauphine – Figure reprise de [Link] 578


Exemples de requêtes en GQL

©Maude Manouvrier - Univ. Paris Dauphine – Figure reprise de [Link] 579


Principaux moteurs orientés graphes

©Maude Manouvrier - Univ. Paris Dauphine – Repris [Link] 580

Vous aimerez peut-être aussi