0% ont trouvé ce document utile (0 vote)
71 vues85 pages

BigData NoSQL

Transféré par

ala gharbi
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)
71 vues85 pages

BigData NoSQL

Transféré par

ala gharbi
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

NoSQL

2024-2025
Objectifs du cours
LOGO
某某科技集团

❑ L’objectif principal de ce cours est de comprendre :

− les concepts des bases de données NoSQL

− l’utilité de leur utilisation

− maîtriser la création, l’interrogation, la manipulation et la gestion d’une base


de données NoSQL

2
Plan du cours
LOGO
某某科技集团

I. Les bases de données NoSQL: Introduction

II. Les bases de données orientées colonnes: Cassandra

III. Les bases de données orientées documents: MongoDB

IV. Les bases de données orientées graphe: Néo4j

3
Chapitre 1 Les bases de données
NoSQL: Introduction
◼ Bases de données
◼ Systèmes de gestion des BD
◼ Le mouvement Big Data
◼ Le mouvement NoSQL
◼ Les grandes familles NoSQL
Bases de données (BD)
LOGO
某某科技集团

❑ Définition
« Une Base de Données (BD) est un ensemble structuré de données enregistrées
sur des supports accessibles par l’ordinateur pour satisfaire simultanément
plusieurs utilisateurs de manière sélective et en un temps opportun »

❑ Objectifs
➢ Bonne représentation du monde réel : une image aussi fidèle que possible
de la réalité.
➢ Indépendance des programmes par rapport aux données : plusieurs
applications partageant les mêmes données
➢ Permettre la liaison entre l’ensemble des données
→ Stocker et retrouver les informations

5
Systèmes de Gestion de Bases de Données (SGBD)
LOGO
某某科技集团

❑ Définition
« Un Système de Gestion de Bases de Données (SGBD) est le logiciel qui permet
d’interagir avec la Base de Données »

❑ Exemples de SGBD
➢ SGBDs relationnels:
- Dans le domaine de la micro-informatique : ACCESS, PARADOX, DBASE,
FOXPRO, etc.
- Sur gros système : ORACLE, SQL Server, SYBASE, INGRES, INFORMIX,
etc.
➢ SGBDs NoSQL
- MongoDB, Cassandra, Néo4J, etc.

6
SGBDs Relationnels: Propriétés ACID
LOGO
某某科技集团

❑ Atomicité : Une série d'opérations (transactions) est exécutée soit en totalité


soit pas du tout.
❑ Cohérence : Toute modification fait évoluer la base d'un état cohérent à un
autre état cohérent, en respectant l'intégralité des contraintes d'intégrité, y
compris les contraintes référentielles.
❑ Isolation : Aucune transaction en cours n'est affectée par une quelconque
transaction non encore validée, même si certaines des opérations qui la
composent sont déjà validées séparément.
❑ Durabilité : Les résultats d'une transaction une fois validée sont permanents, y
compris en cas de destruction de parties du matériel non affectées au
stockage des données de la base.
→ L'intégralité des fonctions doit être accessible par le modèle relationnel.

7
Le mouvement Big Data
LOGO
某某科技集团

❑ Le nombre de données produites chaque année

Source: Oracle

8
Big Data: les fameux 5 V
LOGO
某某科技集团

❑ Volume : quantités énorme de données générées chaque seconde (Sur


Facebook seulement, nous envoyons 10 millions de messages par jour)
❑ Variété : différents types de données (structurées, semi- structurées, non-
structurées)
❑ Vélocité : la vitesse à laquelle la nouvelle donnée est générée et se déplace
❑ Valeur : c’est le dernier V à prendre en compte quand on parle de Big Data
❑ Véracité: fiabilité de la donnée.
→ Big data nécessite une architecture distribuée

9
Le mouvement NoSQL
LOGO
某某科技集团

❑ Qu'est-ce que le NoSQL ?


NoSQL signifie Not Only SQL et non pas No SQL, il s'agit de compléments aux SGBDR
pour des besoins spécifiques et non de solutions de remplacement.
❑ Pourquoi le NoSQL (Limites des SGBDR)?
➢ Licence des SGBDR très chère (Oracle, ...)
➢ Le SQL a un schéma fermé
➢ Performances faibles, sur de gros volumes de données, comparées au
NoSQL
❑ Le NoSQL vise:
➢ Gestion d'énormes quantités de données
➢ Structuration faible du modèle
➢ Montée en charge

10
NoSQL: besoins
LOGO
某某科技集团

❑ Gérer un volume important de données structurées, semi-structurées et non


structurées
❑ Flexibilité des modèles de données
➢ Données semi ou non structurées
➢ Structure changeante
❑ Système simple à déployer
❑ S’affranchir des propriétés ACID
❑ Architecture distribuée
❑ Partitionnement horizontal sur plusieurs nœuds
➢ Partitionnement horizontal sur plusieurs nœuds

11
NoSQL: Théorème CAP
LOGO
某某科技集团

❑ Aussi connu sous le nom de théorème de Brewer dit qu'il est impossible sur un
système informatique de garantir en même temps les trois contraintes suivantes:

Disponibilité
(Availability)
Chaque client peut
toujours lire et écrire

A
SGBDR SGBD-NoSQL
Tolérance au
Cohérence
partitionnement
(Consistency)
(Partition Tolerance)
Chaque client a la
même vue de chaque C P Le système fonctionne
SGBD-NoSQL malgré la panne
donnée à tout instant
12
NoSQL: Schema-Less
LOGO
某某科技集团

❑ Les bases NoSQL se fondent sur une approche dite schema-less:


➢ Sans schéma logique défini a priori;
➢ L'équivalent du CREATE TABLE en SQL n'est pas nécessaire;
➢ On peut directement faire l'équivalent de INSERT INTO.

→ Cela apporte de la souplesse et de la rapidité, mais se paye avec moins de


contrôle et donc de cohérence des données

13
SQL vis NoSQL
LOGO
某某科技集团

SQL NoSQL
Coherence forte : Coherence faible :
➢ Logique : Schemas, contraintes ➢ Schemaless, pas de contraintes
➢ Physique : Transactions ACID ➢ Théorème CAP
Distribution des données Distribution des traitements :
➢ Transactions distribuees ➢ Traitements ≪ batch ≫
➢ MapReduce
Ressources limitées Ressources illimitées
➢ Optimisation de requetes ➢ Passage à l’échelle horizontal
➢ Langage standard : SQL ➢ Langages spécialisés, API

14
Les grandes familles NoSQL
LOGO
某某科技集团

❑ 4 grandes familles:

Clés-Valeurs Orientée Colonnes Orientée Documents Orientée Graphe

15
Base de données clé-valeur
LOGO
某某科技集团

❑ 1 base = 1 table

❑ API simple et très basique: Put, Get, Delete, Update


❑ Cible: Stockage de gros volume de données, Collecte d’évènements
❑ Avantages: recherche rapide, table à 2 colonnes
❑ Inconvénients: aucun schéma, pas de garantie d’intégrité
❑ Implémentations
➢ Dynamo :utilisée par Amazon pour gérer le panier d’achat
➢ Voldemort :Développée et utilisée par LinkedIn
➢ Riak: Edité par Basho Technologies ,hybride orientée clé/valeur ou document
16
Base de données orientée colonnes
LOGO
某某科技集团

❑ Structure des données par familles de colonnes


➢ 1 clé pour accéder à un ensemble de colonnes
➢ Colonnes sont groupées par famille de colonne
❑ Données stockées par colonne
➢ Chaque colonne est définie par un couple clé-valeur
➢ Les colonnes sont regroupées par ligne
➢ Chaque ligne est identifiée par un identifiant unique

❑ API de bas niveau


❑ Requête sur : Lignes, Familles de colonnes , Noms de colonnes

17
Base de données orientée colonnes
LOGO
某某科技集团

❑ Cible
➢ Répond aux problématiques de grande charge de très haute disponibilité
➢ Données stockées suivant des timestamps
➢ Adaptée aux données issues de capteurs
➢ Enregistrement des actions d'un utilisateur sur une application
❑ Avantage
➢ Forte tolérance aux pannes
➢ Facilite l’agrégation
❑ Inconvénient
➢ API de (très) bas niveau
❑ Implémentations
➢ Google BigTable
➢ Hbase: développé au sein de Hadoop, très performant en lecture
➢ Cassandra: initialement créé par Facebook, très performant en écriture mais
pas de garantie de cohérence stricte
18
Base de données orientée documents
LOGO
某某科技集团

❑ Structure de données par collections de documents


➢ Une collection peut contenir plusieurs documents
➢ Chaque document possède un identifiant unique généré par MongoDB,
le champ _id.

❑ Document
➢ Unité de base de stockage
➢ Equivalent aux lignes dans les SGBDR
➢ Ensemble de couples clé-valeur au
format JSON ou XML
➢ Chaque document possède un
identifiant unique dans une collection

19
Base de données orientée documents
LOGO
某某科技集团

❑ Cible
➢ Journalisation d’évènements
➢ Recherche complexe
❑ Avantage
➢ Données semi-structurées
➢ Gestion de la version du document
❑ Inconvénient
➢ Performances des requêtes
❑ Implémentations
➢ CouchDB: Pas de verrou lors des accès concurrents
➢ MongoDB: Permet d’indexer les propriétés des documents afin d’optimiser
une recherche
➢ Riak: Base hybride orientée clé/valeur ou document

20
Base de données orientée graphe
LOGO
某某科技集团

❑ Permet de décrire les relations entre des entités


➢ Modélisation des problématiques spécifiques avec forte connectivité
➢ Recherche de liens optimaux

Exemple : matérialiser un
réseau d’amis
- Qui est ami avec Saida ?
- Quels sont tous les amis de
Saida ? (directs et indirects)
- Quelles sont les amitiés de
plus de 10 ans → On ajoute
des propriétés aux relations

21
Base de données orientée graphe
LOGO
某某科技集团

❑ Cible
➢ Représentation de relations, de réseaux, d’organisations
❑ Avantage
➢ Algorithmes de la théorie des graphes (chemin le plus court, degré de
relation, …)
❑ Inconvénient
➢ Parcours complet de la base obligatoire pour avoir une réponse exhaustive
❑ Implémentations
➢ Neo4J
➢ Titan
➢ FlockDB
➢ GraphBase
➢ InfiniteGraph

22
NoSQL: Passons à la pratique
LOGO
某某科技集团

❑ Orientée colonnes: Cassandra

❑ Orientée documents: MongoDB

❑ Orientée graphe: Neo4J

23
Chapitre 2 Base de données
orientées colonnes
--Cassandra--
◼ Introduction
◼ Installation
◼ Gestion d’une base de données Cassandra
Cassandra: Introduction
LOGO
某某科技集团

❑ Système de Gestion de Bases de Données NoSQL conçu à l’origine par


Facebook, maintenant un projet de la fondation Apache, distribué par la société
Datastax (2008).
➢ Initialement basé sur le système BigTable de Google (stockage orienté
colonnes)
➢ A fortement évolué vers un modèle relationnel étendu
➢ Totalement indépendant de Hadoop (gère lui-même la distribution et la
réplication des données).
➢ Un langage de définition de schéma et de requêtes, CQL (pas de jointure)
❑ Construit dès l’origine comme un système scalable et distribué.
➢ Propose des méthodes de passage à l’échelle inspirées du système Dynamo
➢ Distribution par hachage (consistent hashing)
➢ Tolérance aux pannes par réplication en mode multi-noeuds
25
Cassandra: Modèle de données
LOGO
某某科技集团

❑ Cassandra est distribué, c’est à dire que :


➢ Les données sont disposées sur plusieurs machines, avec ou sans réplication
(certaines machines ont des données en commun).
➢ Les traitements sont effectués simultanément sur ces machines, selon les
données qu’elles ont, par rapport à ce qu’il faut faire.
❑ Cassandra est également décentralisé, c’est à dire qu’aucune machine n’a un rôle
particulier.
❑ Dans Hadoop, les machines n’ont pas les mêmes rôles : namenode, datanode,
nodemanager. . . Au contraire, dans Cassandra, les machines ont toutes le même
rôle : stocker les données et calculer les requêtes. On peut contacter n’importe
laquelle pour toute requête

26
Cassandra: Structure du cluster et données
LOGO
某某科技集团

❑ Les machines, appelées nodes, sont


organisées en un « anneau » (ring) :
chacune est reliée à une précédente et une
suivante, le tout formant une boucle

❑ Les communications sont gérées d’une


manière appelée Gossip (rumeur) : les
informations vont d’un nœud à l’autre.

❑ Un client dépose des données sur l’un des


nœuds, elles sont dupliquées et envoyées
aux nœuds concernés.
27
Cassandra: Architecture
LOGO
某某科技集团

❑ Une instance Cassandra est une collection de nœuds indépendants qui sont
configurés ensemble pour former un cluster.
❑ Dans un cluster, tous les nœuds sont égaux, ce qui signifie qu'il n'y a pas de
nœud maître ou un processus centralisant leur gestion.
❑ Cassandra utilise un protocole appelé Gossip afin de découvrir la localisation et
les informations sur l'état des autres nœuds du cluster. Le protocole Gossip est un
protocole de communication de type « peer-to-peer » dans lequel les nœuds
échangent périodiquement des informations sur leur état mais également sur ce
qu'ils savent des autres nœuds.

28
Cassandra: Architecture
LOGO
某某科技集团

❑ Quatre composants de base: keyspace, Famille de colonnes, Colonne et Ligne


➢ Keyspace: l’équivalent de database dans le monde des bases de données
relationnelles
➢ Famille de colonnes (Column Family): c’est l’objet principal permettant de
stocker les données, il peut être assimiler à une table dans le monde des
bases de données relationnelles
➢ Colonne (Column): est composée d’un nom, d’une valeur et d’un timestamp
(instant de création)
➢ Ligne (Row): est représentée par une clé et une valeur.

29
Cassandra: Architecture
LOGO
某某科技集团

❑ Exemple:

30
Cassandra: Réplication de données
LOGO
某某科技集团

❑ La réplication est le processus permettant de stocker des copies des données sur
de multiples nœuds afin de permettre leur fiabilité et la tolérance à la panne
❑ Quand un keyspace est créé dans Cassandra, il lui est affecté la stratégie de
distribution des réplicas, c'est-à-dire le nombre de réplicas et la manière dont ils
sont répliqués dans le cluster.
❑ Il est souvent fait référence au facteur de réplication (replication factor que nous
nommerons RF par la suite) pour parler du nombre total de réplicas dans le
cluster.
➢ un facteur de réplication de 1 signifie qu'il n'y a qu'une seule copie de chaque
ligne ;.
➢ un facteur de réplication de 2 signifie qu'il existe deux copies de chaque
ligne ;
➢ ...

31
Cassandra: Caractéristiques
LOGO
某某科技集团

❑ Principales Caractéristiques:
➢ Tolérance aux pannes de par la réplication des données.
➢ Architecture décentralisée sans nœud maitre.
➢ Modèle de données riche permettant de nombreux cas d’utilisation.
➢ Haute disponibilité, écriture des données très rapide.
❑ Avantages:
➢ Très rapide pour manipuler un volume important de données.
➢ Schemas de données flexible
➢ Possibilité de mettre en cluster plusieurs serveurs Cassandra.
➢ Replication de données.
➢ Passage par une table en mémoire an d’éviter les latences d’écriture sur
disque.
❑ Limites: toutes les données pour une valeur de clé, doivent tenir sur le disque
d’une seule machine.
32
Cassandra: Installation sous Windows
LOGO
某某科技集团

❑ Télecharger la dernière version de Apache Cassandra de la page [Link]


❑ Installer jdk
❑ Installer Python
❑ Décompresser le .tar et le mettre sous C:\
❑ Prendre le chemin d’accès e Python ainsi que de [Link] et les ajouter
dans Variables d’environnement (Bouton droite sur ce PC→ Paramètres
Systèmes Avancés→ Variables d’environnement→ Path → Modifier→ Nouveau)
❑ Sous [Link], éditer le fichier [Link] et ajouter le chemin de Java
(après UNISTALL): set JAVA_HOME=C:\Program Files\Java\jdk1.8\
❑ Même chose pour [Link] (avant @echo off)

33
CQL: Cassandra Query Language
LOGO
某某科技集团

❑ Langage de requête spécifique à Cassandra


❑ Implémentations existantes en Java (JDBC), Python(DBAPI2), C++…
❑ Permet de manipuler et interroger la base de données dans un langage
ressemblant à SQL
❑ Connexion au shell:
➢ Dans CMD, taper Cassandra –f (pour lancer le serveur) et puis le réduire
➢ Lancer un autre CMD et puis taper:
• java-version
• nodetool status
• cqlsh (ouvrire le schell cql → client)

34
CQL: Création et Suppression d’un keyspace
LOGO
某某科技集团

❑ Création d’un espace de clés (ensemble de tables)


CREATE KEYSPACE [IF NOT EXISTS] nomkeyspace
WITH REPLICATION = {
'class': 'SimpleStrategy',
'replication_factor': 2
};
La stratégie simple convient pour les clusters locaux. Les données seront
répliquées en 2 exemplaires.
❑ Suppression d’un keyspace et de tout son contenu
DROP KEYSPACE nomkeyspace;

35
CQL: Interrogation d’un keyspace
LOGO
某某科技集团

❑ Lister l’ensemble des keyspaces existants


DESCRIBE KEYSPACES;
❑ Afficher la structure d’un keyspace : cela affiche toutes les commandes servant à
le reconstruire ainsi que ses tables
DESCRIBE KEYSPACE nomkeyspace;
❑ Sélectionner un keyspace pour travailler
USE nomkeyspace;
Au lieu de changer de keyspace, on peut aussi préfixer toutes les tables par
[Link]

36
CQL: Création, modification et suppression d’une table
LOGO
某某科技集团

❑ Créer une table


CREATE TABLE [IF NOT EXISTS] nomtable ( def colonnes );
On peut préfixer le nom de la table par nomkeyspace si on est hors keyspace.
❑ Afficher les tables existants
DESCRIBE TABLE;
❑ Vider une table
TRUNCATE nomtable;
❑ Ajouter un nouveau champ à une table
ULTER TABLE nomtable ADD nomcolonne type;
❑ Supprimer une table
DROP TABLE nomtable;
37
CQL: Identification des n-uplets
LOGO
某某科技集团

❑ Soit une table représentant des clients :


CREATE TABLE clients (
idclient INT, -- numero client
departement INT, -- n° du département, ex: 22, 29, 35...
nom TEXT, ... -- coordonnées du client...
PRIMARY KEY (...));
On a plusieurs possibilités pour la contrainte PRIMARY KEY :
➢ PRIMARY KEY simple (idclient) : les n-uplets sont identifiés par le numero
client, c’est la « row key »
➢ PRIMARY KEY composée (departement, idclient) : la clé est composite,
departement sert de « clé de partition ». Tous les clients du même
département seront sur la même machine et ils seront classés par idclient.
20

38
CQL: Insertion et affichage de données
LOGO
某某科技集团

❑ Insérer des données (comme en SQL) :


INSERT INTO nomtable (nomscolonnes...) VALUES (valeurs...);
Contrairement à SQL, les noms des colonnes concernées sont obligatoires, mais
toutes les colonnes n’ont pas obligation d’y être, les absentes seront affectées
avec null.
❑ Afficher les données insérées:
SELECT * FROM nomtable;
Il y a une très forte limite sur la clause WHERE : elle doit sélectionner des n-
uplets contigus dans un index. Donc c’est limité aux conditions sur les clés
primaires ou secondaires.
On peut ajouter les mots-clés ALLOW FILTERING pour rompre cette contrainte
(ça oblige à traiter tous les n-uplets).

39
CQL: Insertion par le fichier .csv
LOGO
某某科技集团

❑ Il est possible de stocker les données dans un fichier CSV et de les injecter dans
une table par :
COPY nomtable(nomscolonnes...) FROM '[Link]'
WITH DELIMITER=';' AND HEADER=TRUE;
On doit mettre les noms des colonnes dans le même ordre que le fichier CSV.
❑ Une table peut être aussi enregistrée dans un fichier CSV par :
COPY nomtable(nomscolonnes...) TO '[Link]';
Le fichier sera créé/écrasé avec les données indiquées.

40
CQL: Création d’un index
LOGO
某某科技集团

❑ La clé est un index primaire. On crée un index par :


CREATE INDEX ON table ( nomcolonne );
L’index s’appelle généralement table_nomcolonne_idx.
❑ Pour supprimer un index :
DROP INDEX table_nomcolonne_idx
❑ Cassandra autorise des requêtes avec la clause where portant sur les attributs
indexés pour ne pas parcourir toute la collection.
❑ Il n’est pas du tout recommandé de construire un index lorsque :
➢ les données sont extrêmement différentes (ex: une adresse mail)
➢ les données sont très peu différentes (ex: une année)
Il vaut mieux dénormaliser le schéma, construire une autre table ayant une clé
primaire adaptée.

41
CQL: Agrégation
LOGO
某某科技集团

❑ On peut faire une agrégation comme en SQL :


SELECT nomscolonnes... FROM table
...
GROUP BY clé de partition;
❑ Les colonnes peuvent faire appel aux fonctions d’agrégation COUNT, MIN, MAX,
AVG, SUM ainsi que des clauses GROUP BY. Mais dans ce cas, il est impératif
que la colonne groupée soit une clé de partition (composée).
❑ Le schéma des tables doit être conçu en fonction des requêtes et non pas en
fonction des dépendances fonctionnelles entre les données. Cela implique de
dénormaliser le schéma.

42
Spark et Cassandra
LOGO
某某科技集团

❑ Le cours précédent avait présenté les concepts de DataFrame. C’est à dire


l’association entre un RDD et un schéma. Cette association est automatique
quand on utilise Cassandra en tant que source de données.
❑ Il suffit d’importer un plugin établissant le lien entre Spark et Cassandra. Il
s’appelle pyspark-cassandra. Ensuite, on ouvre une table Cassandra et on obtient
un DataFrame sur lequel on peut faire tout calcul Spark souhaité.

43
Chapitre 3 Base de données
orientées documents
--MongoDB--
◼ Introduction
◼ Installation
◼ Gestion d’une base de données MongoDB
◼ Les operateurs logiques et de comparaison
◼ Les index
◼ Les agrégations
MongoBD: introduction
LOGO
某某科技集团

❑ Système de Gestion de Base de Données NoSQL orientée documents creé en


2007
❑ Open-source
❑ Disponibilité de plusieurs fonctionnalités (count, group by, order by, sum...)
❑ Possibilité d’accéder aux données via une console JavaScript des drivers
disponibles pour plusieurs langages de programmation (Java, JavaScript, PHP,
Python, Ruby...) données
❑ Stockées sous format JSON (JavaScript Object Notation)
❑ SGBD NoSQL le plus populaire en 2017

45
MongoBD: organisation
LOGO
某某科技集团

❑ MongoDB fonctionne sous la forme d'un serveur auquel il est possible de se


connecter avec un client textuel (mongo shell).
❑ Un serveur MongoDB est composé de bases de données.
❑ Une base de données contient des collections.
❑ Les collections possèdent des documents.
❑ Chaque document possède un identifiant unique généré par MongoDB, le
champ _id.
❑ Chaque document peut contenir un nombre infini de documents imbriqués.

46
MongoBD: organisation
LOGO
某某科技集团

❑ Exemple: document
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : {
x : 203,
y : 102
}
}

47
SQL vis MongoBD
LOGO
某某科技集团

❑ En BDR, tous les instances d’une table ont les mêmes champs
(mais les valeurs peuvent être différentes)
❑ Dans une collection MongoDB, les documents peuvent ne pas avoir un champ
partagé

48
MongoBD: installation sous Windows
LOGO
某某科技集团

❑ Aller sur le lien [Link]


(onglet server) et choisir la version à télécharger en fonction du système
d’exploitation
❑ Installer le fichier téléchargé
❑ Aller dans le dossier d’installation (C:\Program Files\MongoDB\Server\4.2\bin) et
exécuter le serveur [Link]
❑ Exécuter le client [Link] qui permet de gérer les bases de données
❑ Commandes utiles
➢ mongod : démarrer le serveur
➢ mongo : démarrer une connexion client (démarrer le shell jacascript)
➢ mongoimport : pour importer une base de données
➢ mongoexport : pour exporter une base de données
49
Création/Suppression d’une base MongoBD
LOGO
某某科技集团

❑ Connexion et création d’une base de données:


use nomBD;
Si la base de données n’existe pas, elle sera créée
❑ Suppression d’une base de données:
[Link]();
[Link]({dropDatabase: 1});
❑ Lister les bases de données existantes:
show dbs;
❑ Lister les commandes possibles sur les bases de données:
[Link]();
50
Opérations sur des collections
LOGO
某某科技集团

❑ Création d’une collection: deux façons :


➢ Directement : [Link](’personne’);
➢ En insérant un document : [Link]({nom:“Nabli", prenom: “Rim"});
❑ Lister les collections existantes: show collections;
❑ Suppression d’une collection: [Link]();

51
Opérations sur les documents: Ajout
LOGO
某某科技集团

❑ Ajout d’un document: deux façons :


➢ [Link]({clé1 : ’val1’, clé2 : ’val2’ ...} );
➢ ou bien obj=({clé1 :’val1’, clé2: ’val2’ ... }); ensuite
[Link](obj); (save ajoute l’élément s’il n’existe pas, sinon elle
le modifie en écrasant le contenu précédent)
❑ Pour vérifier que l’ajout a eu lieu: [Link]();
❑ Pour faire plusieurs insertions au même temps [Link]( [ {clé1 :
’val1’, clé2: ’val2’ ... },{cléN : ’valN’, cléM : ’valM’ ...}] );

52
Opérations sur les documents: Modification
LOGO
某某科技集团

❑ Pour faire la modification: [Link]();


prend au moins deux paramètres : élément(s) concernés par la modification et le
type de modification
❑ Modifications possibles:
➢ $set : modifier la valeur d’un champ
➢ $unset : supprimer un champ
➢ $inc : incrémenter la valeur d’un champ
➢ $mul : multiplier l’ancienne valeur d’un champ par la valeur spécifiée
➢ $rename : renommer un champ
➢ $min : modifier la valeur d’un champ si elle est supérieure à la valeur
spécifiée par min (et inversement pour max)

53
Opérations sur les documents: Modification
LOGO
某某科技集团

❑ Autres méthodes de mise-à-jour


➢ updateOne() : pour modifier le premier enregistrement de la sélection (par
défaut)
➢ updateMany() : pour modifier toute la sélection
➢ replaceOne() : pour remplacer le premier élément de la sélection
❑ Exemple1: [Link]({nom: "bob"}, {$set: {ville: ’Marseille’}});
On commence par sélectionner les documents dont le champ nom contient comme
valeur bob. Si on n’utilise pas updateMany (c’est l’équivalent de {multi:true}), seul le
premier document de la collection personne sera concerné par la modification.
❑ Exemple2: [Link]({nom: "bob"}, {$inc:{age:20}, $unset:{prenom:1} });
Faire plusieurs modifications avec une seule requête.

54
Opérations sur les documents: Suppression
LOGO
某某科技集团

❑ Pour supprimer un document: [Link]({nom: "bob"});


On commence par sélectionner les documents dont le champ nom contient comme
valeur bob ensuite tous ces documents seront supprimés.
❑ On peut également utiliser: deleteOne() et deleteMany().

55
Opérations sur les documents: Affichage
LOGO
某某科技集团

❑ Récupérer tous les documents d’une collection: [Link]();


❑ Rechercher selon des critères: [Link]({nom: "bob" ... });
❑ Compter le nombre de documents: [Link]({nom: "bob" ... }).count();
❑ Trier le résultat de recherche dans l’ordre croissant:
[Link]().sort({name: 1});
❑ Trier le résultat de recherche dans l’ordre décroissant:
[Link]().sort({name: -1});
❑ Sauter quelques documents (ne pas les afficher): [Link]().skip(2);
❑ Limiter le nombre de documents à afficher [Link]().limit(2);

56
Opérations sur les documents: Affichage
LOGO
某某科技集团

❑ Trier et limiter le nombre de documents à afficher: [Link]().sort({name:


-1}).limit(2);
❑ Afficher seulement le premier document: [Link]();
❑ Afficher le résultat au format JSON: [Link]().pretty();
❑ Afficher quelques champs: [Link]({},{nom:1}); ça affiche le nom de
toutes les personnes ainsi que leurs identifiants (qui seront affichés
automatiquement) et si on ne veut pas afficher les id
[Link]({},{nom:1,_ id: 0 });
❑ Appeler une fonction pour chaque document de la sélection
[Link]().forEach(function(perso){print([Link] +" "+ [Link]);
}); Pour chaque document de la sélection (forEach), on appelle une fonction qui
affiche le nom et le prénom.

57
Opérations sur les documents: Les expressions régulières
LOGO
某某科技集团

❑ Chercher les personnes dont le nom commence par r :


[Link]({name:/^r/});
➢ les deux / pour indiquer le début et la fin de l’expression régulière
➢ ^ pour indiquer par quoi commence le mot cherché
❑ Chercher les personnes dont le nom se termine par y :
[Link]({name:/y$/});
❑ Chercher les personnes dont le nom commence par a ou par b :
[Link]({name:/^[ab]/});
❑ Chercher les personnes dont le nom commence par une lettre comprise entre a
et d : [Link]({name:/^[a-d]/});

58
Opérations sur les documents: Les expressions régulières
LOGO
某某科技集团

❑ Autres symboles :
➢ Indiquer qu’une lettre x est facultative: x* (0 ou pl++ fois)
➢ Indiquer que la lettre x est obligatoire: x+ (1 ou pl++ fois)
➢ Indiquer que la lettre x doit se répéter au moins 2 fois et au plus 4 fois: x{2,4}
➢ Indiquer que la lettre peut être un caractère quelconque: .
➢ Le ou logique: |

59
Opérations sur un tableau d’un document
LOGO
某某科技集团

❑ $push : ajouter un élément au tableau


❑ $pop : supprimer le premier ou le dernier élément du tableau
❑ $pull : supprimer une ou plusieurs valeurs du tableau
❑ $pullAll : supprimer tous les éléments d’un tableau
❑ $position : utilisée avec push pour indiquer la position d’insertion dans un tableau
❑ $slice : utilisée avec push pour préciser les éléments à garder dans un tableau
❑ $sort : utilisée avec push pour ordonner les éléments d’un tableau

60
Opérations sur un tableau d’un document
LOGO
某某科技集团

❑ Exemple: Considérons le document suivant : [Link]({ id : 5, nom :


’wick’, sport: [ ’foot’, ’hand’, ’tennis’]});
➢ Ajouter un nouveau sport au tableau: [Link]({ id: 5 }, {$push:
{"sport": "basket" }});
➢ Ajouter l’élément ‘volley’ à la position 2 du tableau sport (la première
position est d’indice 0) : [Link]({id:5}, {$push: {"sport": {
$each: [’volley’], $position: 2 }}};
➢ Supprimer le premier élément du tableau: [Link]( {id: 5},
{$pop: {sport:-1}});
➢ Supprimer l’élément foot du tableau sport : [Link]({id: 5},
{$pull: {"sport": "foot"}});

61
Opérateurs logiques et de comparaison
LOGO
某某科技集团

❑ $gt : supérieur à (greater than)


❑ $gte : supérieur ou égal à (greater than or equal)
❑ $lt : inférieur à (less than)
❑ $lte : inférieur ou égal (less than or equal)
❑ $eq : égal à (equal)
❑ $ne : différent de (not equal)
❑ $in : dans (un tableau...)
❑ $nin : pas dans (not in)
❑ $and : et
❑ $or : ou
❑ $not : le non logique
❑ $nor : ou exclusif
62
Opérateurs logiques et de comparaison
LOGO
某某科技集团

❑ Exemple: Soit la collection étudiant suivante :


{"_id" : 1, "nom" : "wick", "notes": [10, 15, 12], "age" : 19 }
{"_id" : 2, "nom" : "bob", "notes": [18, 8, 12], "age" : 35 }
{"_id" : 3, "nom" : "wolf", "notes": [7, 6, 13], "age" : 25 }
{"_id" : 4, "nom" : "green", "notes": [18, 16, 9], "age" : 22 }
➢ Sélectionner les étudiants dont l’âge est entre 30 et 40 ans
[Link]({ $and: [{ age:{$gte:20}},{ age:{$lte:30}}]});
➢ Afficher les personnes dont le champ name existe:
[Link]({name: {$exists:true}});
➢ Afficher les personnes dont l'âge est divisible par 5:
[Link]({ age:{ $mod: [ 5, 0 ] }})
➢ Sélectionner les étudiants âgés de plus de 30 ans:
[Link]({"age":{$gt:30}})
63
Les index
LOGO
某某科技集团

❑ Si on a un champ (autre que id) selon lequel on effectue des recherches très
fréquemment, on peut créer un index sur ce champ
❑ Par défaut, on a un index sur chaque id d’une collection (et il est impossible de
le supprimer)
❑ Consulter la liste d’index sur la collection: [Link]();
❑ Créer un nouvel index sur un champ x: [Link](x:1);
❑ Supprimer un index sur un champ x: [Link](x:1)

64
Les agrégations
LOGO
某某科技集团

❑ C’est une requête qui retourne un résultat sous forme d’un tableau. Ça permet
d’utiliser des fonctions d’agrégations comme en SQL.
❑ Commandes:
➢ $group : Permet de regrouper des documents (=group by en SQL)
➢ $out : Permet de créer une nouvelle collection à partir d’une autre qui existe
déjà
➢ $unwind : Permet de décomposer un tableau en autant de documents que d’
élément
➢ $match : Permet de filtrer les documents selon une condition spécifiée
➢ $sample : Permet de sélectionner aléatoirement un nombre de documents
spécifié dans la requête
➢ $max, $min, $sum, $sqrt, $pow, $floor, $divide, $abs, $ifNull, $map, $reduce,
$arrayToObject , $split, $slice, $size, $substr, $toUpper, $toLower,$concat…
❑ Exemple: Choisir aléatoirement trois documents de la collection
[Link]([ { $sample:{ size: 3 }} ]
65
Chapitre 3 Base de données
orientées graphe
--Neo4j--
◼ Introduction
◼ Installation
◼ Gestion d’une base de données Neo4j
BD orienté graphe
LOGO
某某科技集团

❑ Les graphes sont partout


➢ Réseaux sociaux ou de transports
➢ Interactions de protéines
➢ Recommandation en ligne
❑ Les traitements sur les graphes
➢ Requêtes topologiques: les amis des amis, la station la plus proche, les
utilisateurs ayant commandé un même article
➢ Analyses en mode batch: détection de communautés, calcul de statistiques
❑ Deux principaux avantages
➢ Permet de stocker plusieurs types de relations en même temps
➢ Traversée du graphe sans devoir recalculer les relations

67
BD orienté graphe: Neo4j
LOGO
某某科技集团

❑ Neo4j est une base NoSQL orientée graphes, complètement compatible avec les
transactions ACID
❑ Version open source et version commerciale
❑ Code source disponible sur GitHub [Link]
❑ Les données sont stockées sur disque sous la forme d'une structure de données
optimisée pour les réseaux de graphes
❑ Différents cas d’usage :
➢ Recommandation
➢ Détection de fraude
➢ …

68
BD orienté graphe: organisation
LOGO
某某科技集团

❑ l'information dans un graphe attribué est modélisée grâce à trois blocs de base:
➢ le nœud ou sommet (node, vertex): Un nœud représente une entité et
possède des propriétés
➢ la relation ou arête (relationship, edge): Une arête est directionnelle et
possède des propriétés
➢ la propriété ou attribut (property, attribute): portée par un nœud ou une
relation
Nœuds

Propriétés
Relation
69
BD orienté graphe: exemple de graphe
LOGO
某某科技集团

70
Installation de Neo4j
LOGO
某某科技集团

❑ Installer la dernière version de neo4j: h9ps://[Link]/


❑ neo4j permet de lancer plusieurs commandes de gestion
➢ neo4j start : démarre le serveur
➢ neo4j stop : arrête le serveur
➢ neo4j status : récupère le statut du serveur
➢ neo4j-shell : propose un client en ligne de commande
❑ Le démarrage de Neo4j lance également un serveur web

71
Cypher
LOGO
某某科技集团

❑ Langage déclaratif
❑ Interrogation et manipulation d’une base Neo4j très simples et très puissantes
❑ Langage non fermé : sémantique définie avec liaisons
❑ Deux clauses principales pour construire des requêtes
➢ CREATE permet de créer une nouvelle entité
➢ MATCH permet de chercher des entités
❑ Identification graphique des entités
➢ Nœud représenté entre parenthèses et deux-points pour label
➢ Relation représentée avec flèches et crochets pour détails
➢ Propriétés représentées par un dictionnaire à la JSON

72
Cypher
LOGO
某某科技集团

❑ MATCH : motif recherché


❑ WHERE : filtre sur le résultat
❑ RETURN : formatage du résultat
❑ LIMIT : restriction de la taille du résultat
❑ ORDER BY : tri du résultat

73
Lire des données et la structure du graphe
LOGO
某某科技集团

❑ Syntaxe générale
[MATCH WHERE]
[OPTIONAL MATCH WHERE]
[WITH [ORDER BY] [SKIP] [LIMIT]]
RETURN [ORDER BY] [SKIP] [LIMIT]
❑ Identifier les données: l’expression MATCH
➢ MATCH ()--(): Nœuds anonymes reliés par une relation
➢ MATCH (n)--(m): Nœuds identifiés par n et m reliés par une relation
➢ MATCH (n)-->(m)<--(o), (m)<--(p): Noeud m ayant trois relations incidentes
orientées
➢ MATCH (n)-[r]->(m): Relation orientée identifiée par r
➢ MATCH (n)-[*]->(m): Nœuds identifiés par n et m reliés quel que soit le
nombre de relations traversées
74
Lire des données et la structure du graphe
LOGO
某某科技集团

❑ L’expression WHERE: est un prédicat retournant soit faux soit vrai


➢ WHERE [Link] = "Alice" : Dont le nom est Alice
➢ WHERE [Link] <> "Alice" : Dont le nom n'est pas Alice
➢ WHERE [Link] =~ "Alic.*" : Dont le nom commence par Alic
➢ WHERE NOT n<--() : Où n ne possède aucune relation entrante

75
Collecter des données
LOGO
某某科技集团

❑ L’expression RETURN
➢ RETURN* : Retourne toutes les valeurs de tous les identificateurs
➢ RETURN n AS nomColonne : Utilise un alias pour nom de colonne
➢ RETURN DISTINCT n : Retourne uniquement les lignes uniques pour
l'identificateur n
➢ ORDER BY [Link] : Tri ascendant sur la colonne [Link]
➢ ORDER BY [Link] DESC : Tri descendant sur la colonne [Link]
➢ SKIP {nombre_a_passer} : Passe un certain nombre de résultats
➢ LIMIT {nombre_limite} : Limite le nombre de résultats
➢ SKIP {nombre_a_passer} LIMIT {nombre_limite} : Pagination (de
nombre_a_passer à nombre_limite)
➢ RETURN count(*) : Retourne le nombre de résultats obtenus pour la requête

76
Collecter des données
LOGO
某某科技集团

❑ L’expression WITH:
➢ Syntaxe similaire à celle de RETURN. Cependant elle isole les différentes
parties de la requête
MATCH (quelqun)-[:EST_AMI_AVEC]-(ami)
WHERE [Link] = {nom}
WITH quelqun, count(ami) AS amis
WHERE amis > 10
RETURN quelqun
➢ Comme avec la clause RETURN, il est possible d'utiliser les mots clés
ORDER BY, SKIP et LIMIT
MATCH (quelqun)-[:EST_AMI_AVEC]-(ami)
WITH quelqun, count(ami) AS amis
ORDER BY amis DESC
SKIP 1 LIMIT 3
RETURN quelqun
77
Collecter des données
LOGO
某某科技集团

❑ L’expression UNION:
➢ Retourne une union distincte (pas de ligne dupliquée) des deux requêtes
MATCH (a)-[:CONNAIT]->(b)
RETURN [Link]
UNION
MATCH (a)-[:AIME]->(b)
RETURN [Link]
➢ Retourne une union complète (duplication de lignes possible) des deux
requêtes
MATCH (a)-[:CONNAIT]->(b)
RETURN [Link]
UNION ALL
MATCH (a)-[:AIME]->(b)
RETURN [Link]
78
Modifier les données et la structure d'un graphe
LOGO
某某科技集团

❑ Syntaxe générale
➢ Modification uniquement :
(CREATE [UNIQUE] | MERGE)*
[SET|DELETE|REMOVE|FOREACH]*
[RETURN [ORDER BY] [SKIP] [LIMIT]]
➢ Lecture et modification :
[MATCH WHERE]
[OPTIONAL MATCH WHERE]
[WITH [ORDER BY] [SKIP] [LIMIT]]
(CREATE [UNIQUE] | MERGE)*
[SET|DELETE|REMOVE|FOREACH]*
[RETURN [ORDER BY] [SKIP] [LIMIT]]

79
Modifier les données et la structure d'un graphe
LOGO
某某科技集团

❑ L’expression CREATE
➢ CREATE n : Crée un nœud identifié n dans la requête
➢ CREATE (n {nom: "Alice"}) : Crée un nœud identifié n avec une propriété nom
ayant pour valeur Alice
➢ CREATE (n objet) : Crée un nœud identifié n avec une suite de propriétés
(sous forme d'objet {})
➢ CREATE (n)-[r:CONNAIT]->(m) : Crée une relation CONNAIT entre le noeud
n et le noeud m
➢ CREATE (n)-[:CONNAIT {depuis: "Lycée"}]->(m): Crée une relation CONNAIT
pourvue de la propriété depuis.

80
Modifier les données et la structure d'un graphe
LOGO
某某科技集团

❑ L’expression SET
➢ SET [Link] = "Alice au pays des merveilles", [Link] = "Lewis Caroll": Crée
ou met à jour des propriétés sur un nœud ou une relation.
➢ SET nr=objet: Pose un ensemble de propriétés (objet {}) ou remplace
l'ensemble des propriétés sur un nœud ou une relation
➢ SET n:Personne: Ajoute le label Personne au nœud n
❑ Les expressions DELETE et REMOVE
➢ DELETE n, r : Supprime un nœud et une relation
➢ REMOVE [Link] : Supprime la propriété nom sur le nœud n
➢ REMOVE n:Personne : Supprime le label Personne du nœud n

81
Modifier les données et la structure d'un graphe
LOGO
某某科技集团

❑ L’expression MERGE
➢ Trouver le nœud n, le crée s'il n'existe pas: MERGE (n:Personne {nom:
"Sylvain"}) ;
➢ Mise à jour conditionnelle : si le nœud n n'existe pas, il est créé et une
propriété dateCreation est ajoutée à ce nœud ; si le nœud n existe déjà, la
propriété compteur du nœud n est augmentée et sa propriété
dateModification est mise à jour:
MERGE (n:Personne {nom: "Sylvain"})
ON CREATE SET [Link]=timestamp()
ON MATCH SET [Link]= coalesce([Link], 0) + 1,
[Link] = timestamp()
➢ Trouve la relation r, la crée si elle n'existe pas.
MATCH (a:Personne {nom: "Sylvain"}), (b:Personne {nom: "Christophe"})
MERGE (a)-[r:CONNAIT]->(b)
82
Modifier les données et la structure d'un graphe
LOGO
某某科技集团

❑ L’expression INDEX
➢ CREATE INDEX ON :Personne(nom): Crée un index basé sur le couple du
label Personne avec la propriété nom
➢ MATCH (n:Personne) WHERE [Link] = "Sylvain“ : Retrouve le noeud
Sylvain en utilisant l'index :Personne(nom) (index retrouvé par l'opération
d'égalité. À noter que l'utilisation d'une fonction telle que WHERE
lower([Link]) = "sylvain" ne permet pas de déterminer l'index à utiliser)
➢ DROP INDEX ON :Personne(nom): Supprime l'index basé sur le couple du
label Personne avec la propriété nom
➢ MATCH (n:Personne) USING INDEX n:Personne(nom) WHERE [Link] =
"Sylvain“: Force l'utilisation de l'index n:Personne(nom) parmi ceux définis
pour le nœud

83
Modifier les données et la structure d'un graphe
LOGO
某某科技集团

❑ L’expression CONSTRAINT
➢ CREATE CONSTRAINT ON (p:Personne) ASSERT [Link] IS UNIQUE:
Crée une contrainte d'unicité (et l'index associé) basé sur le couple du
label Personne avec la propriété nom.
➢ DROP CONSTRAINT ON (p:Personne) ASSERT [Link] IS UNIQUE:
Supprime la contrainte d'unicité.

84
Sources
LOGO
某某科技集团

Plusieurs ressources ont été utilisées afin de préparer ce support de cours tel que:
❑ Le Web
❑ Des cours d’autres enseignants
➢ Le Big Data et les bases de données NoSQL:MongoDB, Achref El Mouelhi
➢ BigData, Pierre Nerzi (2019)
➢ Le SGBD Cassandra, PESTELLE Nicolas / SPECQ Corentin, Universite du Littoral Cote
d'Opale 2018.
➢ Introduction aux systèmes NoSQL, Bernard ESPINASSE, Ecole Polytechnique
Universitaire de Marseille, 2018
➢ Bases de Donnees NoSQL: Mohamed-Amine Baazizi
❑ Des livres
➢ Sylvain Roussy: Neo4j : Des données et des graphes
❑ Des articles
➢ Bases de données graphes : comparaison de NEO4J et OrientDB
85

Vous aimerez peut-être aussi