01
📖 Qu'est-ce qu'une Graph Database ?
Une base de données graphe (Graph Database) est un système de stockage qui utilise des nœuds, des relations et des propriétés pour représenter et stocker des données. Contrairement aux bases relationnelles qui utilisent des tables, les graphes excellent dans la gestion de données fortement interconnectées.
💡 À retenir : Les bases de données graphes rendent les requêtes de relations (amis des amis, chaînes de recommandation) jusqu'à 1000x plus rapides qu'avec SQL.
⚡
Performance
Navigation en temps réel
🔄
Flexibilité
Schéma adaptable
🔍
Intuitif
Modèle proche du métier
02
🔍 Le modèle graphe de propriétés
Le modèle Property Graph est le plus répandu (Neo4j, ArangoDB). Il se compose de :
- Nœuds (Nodes) : Les entités (Personne, Discours, Ville)
- Relations (Edges) : Les liens entre nœuds (A_ECRIT, CONNAIT, SITUE_DANS)
- Propriétés (Properties) : Attributs sous forme clé-valeur (nom, âge, date)
- Labels : Types ou rôles des nœuds
📊 Représentation visuelle :
(Orateur:Victor Hugo)
│
├── [A_ECRIT] → (Discours:Les Misérables)
├── [A_POUR_NOM] → "Victor Hugo"
└── [EST_NE_A] → (Ville:Besançon)
📝 Exemple de nœud :
{
labels: ["Orateur"],
properties: {
nom: "Charles de Gaulle",
dateNaissance: "1890-11-22"
}
}
03
🗣️ Langage Cypher (Neo4j)
Cypher est le langage de requête déclaratif de Neo4j, conçu pour être intuitif et visuel. Sa syntaxe utilise des motifs ASCII-art pour représenter les chemins du graphe.
Syntaxe de base
MATCH (orateur:Orateur {nom: "Victor Hugo"})
RETURN orateur
Trouver les discours d'un orateur
MATCH (orateur:Orateur {nom: "Victor Hugo"})-[r:A_ECRIT]->(discours:Discours)
RETURN discours.titre, discours.date
ORDER BY discours.date
Parcours à plusieurs niveaux
# Amis des amis
MATCH (moi:Personne {nom: "Jean"})-[:CONNAIT*2]->(connaissance)
RETURN DISTINCT connaissance.nom
Création de données
CREATE (v:Orateur {nom: "Victor Hugo", naissance: 1802})
CREATE (l:Discours {titre: "Les Misérables"})
CREATE (v)-[:A_ECRIT]->(l)
💡 Astuce : Cypher utilise la notation (nœud)-[RELATION]->(nœud). Les parenthèses pour les nœuds, les crochets pour les relations.
04
🏢 Solutions du marché
| Solution | Type | Langage | Particularité |
| Neo4j |
Propriétaire / Community Edition
| Cypher
| Leader du marché, très mature
|
| ArangoDB |
Open Source
| AQL
| Multi-modèle (graphe + document + recherche)
|
| Amazon Neptune |
Cloud managé
| Gremlin / SPARQL
| Support RDF et Property Graph
|
| TigerGraph |
Propriétaire
| GSQL
| Performances massives
|
🎯 Notre recommandation : Pour débuter, Neo4j Community Edition est gratuit, bien documenté et dispose d'une excellente communauté.
05
🎯 Cas d'usage des bases de données graphes
1. Réseaux sociaux
Recommandations d'amis, parcours de relations, influenceurs.
MATCH (moi:User {id: 123})-[:FRIEND*2]->(suggestion)
WHERE NOT (moi)-[:FRIEND]->(suggestion)
RETURN suggestion.nom
2. Détection de fraude
Identifier des schémas suspects dans des transactions financières.
MATCH (c1:Compte)-[:TRANSFERT*3..5]->(c2:Compte)
WHERE c1.pays <> c2.pays
RETURN c1, c2
3. Moteurs de recommandation
"Les clients qui ont acheté ce produit ont aussi acheté..."
MATCH (p:Produit {id: 123})<-[:ACHETE]-(client)-[:ACHETE]->(reco)
RETURN reco.nom, COUNT(*) ORDER BY COUNT(*) DESC
4. Gestion des dépendances
Analyse d'impact, chemins critiques, architecture logicielle.
5. Knowledge Graph
Graphes de connaissances d'entreprise (moins standardisé que RDF mais plus simple).
07
🎯 Exemple complet : graphe de discours avec Neo4j
Schéma du graphe
(Orateur:DeGaulle) ─[A_PRONONCE]→ (Discours:Appel18Juin)
(Discours:Appel18Juin) ─[CONCERNE]→ (Theme:Resistance)
(Orateur:DeGaulle) ─[EST_A_POUR_NOM]→ "Charles de Gaulle"
Création
CREATE (dg:Orateur {nom: "Charles de Gaulle", naissance: 1890})
CREATE (appel:Discours {titre: "Appel du 18 juin", date: "1940-06-18"})
CREATE (resistance:Theme {nom: "Résistance"})
CREATE (dg)-[:A_PRONONCE]->(appel)
CREATE (appel)-[:CONCERNE]->(resistance)
Requêtes
# Tous les discours sur la Résistance
MATCH (theme:Theme {nom: "Résistance"})<-[:CONCERNE]-(discours)
RETURN discours.titre, discours.date
# Chemin complet : Orateur → Discours → Thème
MATCH path = (orateur)-[:A_PRONONCE]->(discours)-[:CONCERNE]->(theme)
RETURN path
🚀 Chez Le Monde Sémantique
Nous avons choisi RDF pour l'interopérabilité, mais Neo4j reste une excellente alternative pour des cas plus simples.
Comparer avec les Triple Stores →