Plan
I. Bases de données orientées documents
1. Structure de données dans MongoDB
2. Langage de requête dans MongoDB
3. Modélisation des données en MongoDB
4. Opération CRUD dans MongoDB
II. Bases de données orientées graphes
1. Introduction aux bases de données orientées graphe
2. Langage de requête Cypher
3. Modélisation des données dans Neo4j
4. Opérations CRUD
Bases de données orientées graphes
Magasins de données NoSQL qui conservent les données dans un
réseau de nœuds et d’arrêts,
Chaque nœud représente une entité et chaque arrêt représente une
relation entre ces entités,
Ces nœuds peuvent avoir des attributs qui les décrivent plus en détail,
Nous allons utiliser Cypher, un langage conçu spécifiquement pour les
bases de données graphiques comme Neo4j. Il fonctionne un peu
comme SQL mais adapté aux relations et aux graphes
Regardons de plus près les BD Graphiques
BD graphique représentant un réseau social,
4 nœuds (individus) et 4 arêtes (relation entre individus),
Si ces informations devaient être stockées sous forme de tableau:
Les individus et leurs relations ne sont pas directement liés, il faut utiliser une table
intermédiaire pour les connecter,
Relations plus difficiles à identifier et augmente la complexité des requêtes.
Les bases de données graphiques sont utilisées pour:
Stocker des données sociales
Les moteurs de recommandation
La détection des fraudes (action trompeuse visant à obtenir un avantage
illégal: blanchiment d’argents, faux comptes…)
Identifier des modèles et des relations au sein d’un ensemble de données
À mesure que les BD graphiques gagnent en popularité et en utilisateurs, le
nombre de fournisseurs continue de croître:
Neo4j est de loin la BD la plus populaire en
raison de sa nature Open Source et de son
ensemble de fonctionnalités matures
Test de compréhension
Laquelle des affirmations suivantes concernant le graphe affiché est correcte ?
1. Il existe trois types de nœuds différents
2. Il existe cinq types d’arêtes différents
3. Les relations vont toujours dans les deux
sens
4. Les nœuds 'einstein' et 'curie' partagent la
même relation avec 'nobel phys‘
Avantages & Limites
Avantages:
Flexibilité:
Peut changer à mesure que les applications et les industries changent,
Pas besoin de définir à l’avance la structure finale d’un graphe,
Ajout/suppression des nœuds, des propriétés et des arêtes à l’existant graphiques, sans
soucier des informations actuelles déjà stockées
Performance:
Pas besoin d’effectuer des jointures car le traitement des relations entre données peut
être chronophage,
Au lieu de cela nous pouvons suivre les arêtes de nœud en nœud: simple et rapide
Représentation facile des données:
Structure similaire à la pensée humaine,
Facilement visualisées et comprises
Avantages & Limites
Limites
Propriétés des entités avec des valeurs extrêmement grandes
BLOBs (Binary Large Objects) : objets multimédias
CLOBs (Character Large Objects) : collections de données textuelles
Les bases de données graphiques ne fonctionneront pas bien
Utiliser une autre base de données pour stocker ces informations
Langage de requête Cypher
Cette image illustre une relation d’amitié dans un réseau social modélisé sous forme de
graphe
Chaque utilisateur est représenté par un nœud (node), ici un nœud nommé ALI et un
autre nœud inconnu
La relation dirigée FRIEND montre qu’ALI est ami avec une autre personne
Cypher peut interroger cette structure pour retrouver les amis d’ALI
Langage de requête Cypher
MATCH(ali:Person{name:"Ali"})-[:FRIEND]->(friend)RETURN friend
Person est un label qui identifie un type de nœud (ici, une personne)
ali est un alias donné à ce nœud pour pouvoir le réutiliser plus tard dans la requête.
MATCH recherche un nœud source, par exemple une personne connue (name: "ALI")
On spécifie une relation FRIEND vers un autre nœud de type Person
RETURN révèle le nom de l’ami recherché
[Link] Pas d'installation nécessaire, tout fonctionne dans le cloud
[Link] Installation Locale
1. Créer un compte Neo4j Aura (si ce n’est pas déjà fait)
2. Créer une base de données
Clique sur "New Instance "
3. Accéder à l'interface de requêtes Cypher
Clique Une fois ta base prête, clique dessus
sur "Open" pour accéder à Neo4j Workspace
Dans le menu de gauche, clique sur "Query"
Illustration d’une requête Cypher dans
Neo4j qui crée deux nœuds
représentant des personnes, Ali et
Adam, puis établit une relation FRIEND
entre eux.
Requête Cypher qui recherche les amis d'Ali dans la base Neo4j. Elle trouve que Adam
est lié à Ali par la relation FRIEND et le retourne dans le graphe.
Relation unidirectionnelle
Relation bidirectionnelle
Modélisation des données dans Neo4j
1. Identifier les entités principales ➜ elles deviennent les nœuds
2. Identifier les relations entre les entités ➜ elles deviennent les arêtes
3. Définir les propriétés pour les nœuds et/ou les relations
4. Ajouter des labels pour classifier les nœuds
5. Penser en termes de parcours : quels liens doivent exister pour des
requêtes efficaces ?
Opérations CRUD
Etude de cas: Articles Wikipédia sous forme de nœuds et de relations.
1. CREATE
1. CREATE / READ (Lire et Rechercher)
Tu dois ajouter toutes les
variables dans WITH si tu
veux les utiliser plus tard.
Si une variable n'est pas
mentionné dans WITH, elle
disparaît du processus !
WITH garde la portée des
variables active entre les
étapes.
1. CREATE / READ (Lire et Rechercher)
2. UPDATE
2. 1. Modifier une propriété d’un nœud
2.2. Ajouter une nouvelle propriété à un nœud
2. UPDATE
2.3. Supprimer une propriété d’un nœud
3. DELETE
3.1. Supprimer une relation spécifique
3.2. Supprimer un nœud sans relation
3. DELETE
3.3. Supprimer un nœud et ses relations
3.4. Supprimer plusieurs nœuds d’un type
3. DELETE
3.5. Nettoyer tout le Graphe
Importation automatique des données dans Neo4j
Importation avec LOAD CSV:
Préparation des fichiers CSV
Requêtes Cypher pour lire les fichiers et créer les nœuds et relations.
Neo4j Data Importer (outil visuel):
Interface web gratuite pour importer des fichiers CSV sans écrire de Cette section est
code. facultative et proposée
On définit les nœuds et relations par Drag & Drop (glisser & déposer). pour les curieux ou les
projets avancés.
Neo4j ETL Tool:
Importation des données depuis une base relationnelle
Convertit les tables en nœuds et relations.
Importation via un script Python (py2neo ou neo4j-driver)
Programme Python qui lit les données (CSV, JSON, base SQL…) et les
insère dans Neo4j.
Importation automatique des données dans Neo4j
Cas d’étude : détecter des fraudes à partir de transactions entre clients,
commerçants et cartes bancaires en utilisant Neo4j Data Importer
Créer un graphe de données dans Neo4j Aura à partir de fichiers CSV,
modélisant les interactions entre : Cette section est
facultative et proposée
- Clients pour les curieux ou les
- Cartes bancaires projets avancés.
- Transactions
- Commerçants
et visualiser les comportements suspects pour initier une détection de
fraude.
[Link]
Renseigne les infos suivantes:
•Connection URL : colle
l’URL neo4j+s://...
•Username : neo4j
•Password : le mot de passe
donné par Neo4j Aura
•Clique sur "Connect"
Importation des fichiers et ajout de nœuds pour chaque fichier
Création des relations entre nœuds
Détection des fraudes:
Une carte utilisée dans deux villes différentes à quelques minutes d’intervalle
1. Crée un nouveau commerçant dans une ville différente
2. Crée une transaction frauduleuse quelques minutes après l’autre
Détection des fraudes:
Une carte utilisée dans deux villes différentes à quelques minutes d’intervalle
3. Lier cette transaction à la même carte et au commerçant M99
4. Requête de Détection de fraude
TP Une plateforme e-commerce veut recommander des produits aux utilisateurs selon :
Les produits achetés,
Les produits notés (note sur 5),
Les catégories préférées et Les achats des utilisateurs similaires.
1. Modéliser le graphe (Nœuds et Relations et leurs propriétés)
2. CREATE:
Insérer au moins 2 utilisateurs, 2 produits, 1 catégorie
Créez les relations entre les utilisateurs, les produits et les catégories
Similarité par achat
3. READ:
Affichage de graphe
Utilisateurs similaires
Produits achetés par un utilisateur + moyenne de ses notes
Noms des Top produits (les mieux notés)
4. UPDATE:
Mettre à jour le stock d’un produit après un achat
5. DELETE
Supprimer toutes les notes inférieures à 3 données par un utilisateur
1. Modélisation de Graphe
1. 1. Nœuds et leurs propriétés
(Utilisateur {id, nom, age, ville})
(Produit {id, nom, prix, stock})
(Categorie {id, nom})
1. 2. Relations et leurs propriétés
(Utilisateur)-[ACHETE {quantite}]->(Produit)
(Utilisateur)-[NOTE {score}]->(Produit)
(Produit)-[APPARTIENT A]->(Categorie)
(Utilisateur)-[SIMILAIRE A] {score similarite}]->(Utilisateur)
2. CREATE: Insérer au moins 2 utilisateurs, 2 produits, 1 catégorie
2. CREATE: Créez les relations entre les utilisateurs, les produits et les catégories
Relation Produit Catégorie
2. CREATE: Créez les relations entre les utilisateurs, les produits et les catégories
Comportements utilisateurs (achats + notes)
2. CREATE: Similarité par Achats
Calcul de Similarité via Achats
Le mot-clé MERGE en Cypher est comme un mix entre MATCH et CREATE :
S’il existe déjà une relation entre u1 et u2, Neo4j la réutilise.
S’il n’en existe pas encore, Neo4j la crée.
2. READ: Affichage de graphe: tous les nœuds même ceux sans relation sortante
MATCH (n)
OPTIONAL MATCH (n)-[r]->(m)
RETURN n, r, m
//OPTIONAL : pour inclure aussi les nœuds qui n’ont pas de relations: affiche tous le nœuds même ceux qui ne répondent pas à la condition de MATCH
2. READ: Afficher les relations de similarité
2. READ:
Produits achetés par un utilisateur + moyenne de ses notes
2. READ:
Noms des Top produits (les mieux notés)
3. UPDATE:
Mettre à jour le stock d’un produit après un achat
4. DELETE
Supprimer toutes les notes inférieures à 6 données par un utilisateur