0% ont trouvé ce document utile (0 vote)
9 vues48 pages

Introduction aux bases de données NoSQL

Le chapitre II du cours sur le Big Data traite des bases de données NoSQL, en mettant l'accent sur leur capacité à gérer de grands volumes de données non structurées et évolutives, contrairement aux bases de données relationnelles traditionnelles. Il présente également MongoDB, un système de gestion de base de données NoSQL orienté document, et explique ses fonctionnalités, son modèle de stockage, ainsi que les opérations CRUD. Enfin, le document aborde les outils et commandes associés à MongoDB, ainsi que la structure des données au format JSON et BSON.

Transféré par

23006
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)
9 vues48 pages

Introduction aux bases de données NoSQL

Le chapitre II du cours sur le Big Data traite des bases de données NoSQL, en mettant l'accent sur leur capacité à gérer de grands volumes de données non structurées et évolutives, contrairement aux bases de données relationnelles traditionnelles. Il présente également MongoDB, un système de gestion de base de données NoSQL orienté document, et explique ses fonctionnalités, son modèle de stockage, ainsi que les opérations CRUD. Enfin, le document aborde les outils et commandes associés à MongoDB, ainsi que la structure des données au format JSON et BSON.

Transféré par

23006
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

Chapitre II: NoSQL

L3– Cours Big Data

Ing. Sidi Mahmoud RHIL


Sommaire
• Rappels
• Besoins
• NoSQL
• MongoDB

2
Rappels
• Le Big Data fait référence à de très grands ensembles de données et aux
applications qui les traitent.
• Les changements technologiques et sociologiques ont permis la collecte
d’énormes ensembles de données.
• Les CPU/GPU modernes ont d’énormes capacités de traitement, certaines
méthodes standard ne s’adaptent pas aux besoins du Big Data.
• Le traitement parallèle est obligatoire pour atteindre des performances
élevées.
• La gestion du Big Data est complexe et introduit de nouveaux besoins et
technologies: langage de programmations, framework, base de données ...

3
Rappels
• La chaîne de traitement du Big Data est composée des éléments suivants :
• Production/Acquisition.
• Stockage : bas niveau.
• Gestion et requête : bases de données.
• Exploration : fouille de données (Datamining).
• Les deux premières étapes sont désormais gérées via des solutions matures
dédiées.
• Les deux dernières étapes sont encore en cours de recherche et de
nouveaux outils et applications apparaissent toujours.
• ACID inadapté à l’ère du Big Data : de nouveaux principes sont utilisés
comme BASE.

4
Besoins - Mémoire
• La seule façon de traiter les mégadonnées est d’utiliser une forme de traitement
parallèle.
• Il n’y a pas d’unité de calcul capable de fournir le nombre de flops (Floating-point
Operations Per Second) nécessaire au traitement moderne des données.
• Le traitement parallèle (programmation) est difficile.
• La mémoire partagée:
• Un ordinateur est constitué d’unités de traitement (PU) et de mémoire (entre autres).
• Les ordinateurs actuels (même les téléphones) ont plusieurs PU (les cœurs) qui utilisent tous
la même mémoire.
• Le partage de la mémoire se fait au niveau matériel ce qui garantit de bonnes performances.
• La mémoire partagée au niveau logiciel est également disponible (via des frameworks), mais
elle s’accompagne d’un coût de programmation plus élevé et (parfois) de performances
inférieures.

5
Besoins - Programmation parallèle
• Deux problèmes sur les architectures de mémoire partagée :
• Fiabilité : un programme parallèle produit-il vraiment les mêmes résultats que
sa version séquentielle ?
• Efficacité : le programme parallèle fait-il bon usage du matériel en réduisant
le temps utilisateur nécessaire pour effectuer une tâche ?
• Le problème tourne autour des communications entre les parties du
programme : il est facile de tout verrouiller (pour obtenir des résultats
corrects) mais alors l’efficacité en souffre beaucoup.
• De nombreux problèmes d’apprentissage peuvent être traités avec un
parallélisme simplifié.

6
Besoins - Systèmes distribués
• Lorsque les données ne peuvent pas être traitées efficacement sur un seul
ordinateur, il faut s’appuyer sur un système distribué.
• Ceux-ci sont constitués de plusieurs ordinateurs interconnectés par un réseau.
• La principale différence entre un système distribué et un système
multicœurs/CPU est que dans le premier, la mémoire n’est pas partagée
directement.
• Plusieurs processus sont en cours d’exécution (sur des ordinateurs différents) et
communiquent avec des messages (même si cette communication peut être
implicite lors de l’utilisation d’API de haut niveau).
• Cluster computing vs Distributed : machines étroitement couplées (avec un
réseau très rapide par exemple) vs faiblement couplées.
• Le principal avantage des systèmes distribués par rapport aux systèmes à
mémoire partagée est le risque réduit de comportement incohérent induit par
l’aspect explicite du partage.
7
Besoins - Systèmes distribués
• Map reduce:
• Paradigme de traitement parallèle simple proposé par Google en 2004.
• Calcul séparé entre les opérations de map et l’opération de réduction
(reduce).
• Map : appliquée à certaines données locales par chaque nœud de calcul.
• Reduce : appliquée aux groupes de données produits par les opérations map.
• « Généralisation de aggregate/groupby en SQL ».

8
NoSQL - Définition
• Les bases de données NoSQL sont appelées non relationnelles ou non
SQL pour souligner le fait qu’elles peuvent gérer de gros volumes de données
non structurées et évoluant rapidement, et sont des bases de données non
relationnelles.
• Aujourd’hui, l’acronyme NoSQL est souvent interprété comme « Not Only
SQL », pour souligner qu’elles peuvent coexister avec des bases
relationnelles tout en offrant des modèles de données plus flexibles.
• Ce n’est pas simplement un refus du SQL ou des bases relationnelles.
• Cela indique que ces bases de données peuvent utiliser d’autres modèles
de stockage que le traditionnel modèle relationnel (tables avec lignes et
colonnes).

9
NoSQL - Limites des SGBDR
• La base de données relationnelle a un schéma fixe.
• La base de données relationnelle suit les propriétés ACID: Atomicité, Cohérence,
Isolement et Durabilité.
• La base de données relationnelle prend en charge les transactions (également les
transactions complexes avec jointures).
• La base de données relationnelle est utilisée pour gérer les données arrivant à
faible vitesse.
• La base de données relationnelle ne gère que des données structurées.
• La base de données relationnelle a une structure centralisée.
• Les bases de données relationnelles sont utilisées pour gérer un volume modéré
de données.
• La base de données relationnelle offre une évolutivité en lecture uniquement.

10
NoSQL - Propriétés
• Pas de schéma fixe.
• Seulement finalement cohérent.
• Ne prend pas en charge les transactions (ne prend en charge que les transactions
simples).
• Gère les données arrivant à grande vitesse.
• Les données arrivent de nombreux endroits.
• Peut gérer des données structurées, non structurées et semi-structurées.
• Peut gérer des mégadonnées ou des données dans un volume très élevé.
• A une structure décentralisée.
• Pas de point de défaillance unique (single point of failure).
• Offre une évolutivité en lecture et en écriture (scaling out).

11
NoSQL - Types
• Documents: les bases de données de type document stockent les données sous
forme d’objets au format JSON. MongoDB est un exemple de telle base de
données.
• Key-Value: stockent les données sous la forme d’un ensemble de paires clé-
valeur. Largement utilisés comme fournisseurs de mise en cache. Exemples :
Redis, Memcache...
• Column Oriented: stockent les données sous la forme d’un ensemble de colonnes
et fonctionnent très bien lorsque des colonnes spécifiques sont accédées. Les
lignes de données peuvent s’étendre sur plusieurs nœuds ou partitions dans ces
bases de données. Exemples : Hbase et Cassandra.
• Graphs: stockent les données sous forme de nœuds et de relations. Ils aident les
utilisateurs à exprimer les relations complexes qui existent entre les éléments de
données et à les interroger à l’aide de langages de requête graphique spécialisé.
Exemples : Neo4j, Titan.

12
MongoDB
• Système de gestion de base de données NoSQL orienté document.
• Créé en 2007 et Open Source.
• Développé en C++.
• Disponibilité de plusieurs fonctionnalités SQL (COUNT, GROUP BY,
ORDER BY, SUM, ...).
• Possibilité d’accéder aux données via une console JavaScript.
• Pilotes/Clients disponibles pour la programmation dans plusieurs
langages de programmation.
• Données stockées au format JSON (JavaScript Object Notation).
13
MongoDB
• Utilise un modèle de stockage par document.
• Une base de données contient des Collections de documents.
• Les documents sont écrits au format BSON : Format binaire de JSON.
• Un document représente une entité du système.
• Chaque collection de base de données est composée de zéro ou plusieurs
documents.
• Les documents d’une collection n’ont pas besoin de suivre le même format.
• Un document peut contenir des sous-documents.
• La représentation textuelle des champs est automatiquement enregistrée
au format binaire (BSON).

14
MongoDB - Analogie avec les SGBDR

15
Les outils et commandes MongoDB
• Mongod: le moteur de base
• Mongsh: le shell javascript
• Mongos: le contrôleur de Sharding
• Les outils d’import/export
• mongoimport, mongoexport, mongodump, mongorestore, bsondump
• mongofiles: pour interagir avec GridFS (système de fichier intégré à
mongoDB)
• Mongostat: visualisation des stats d’une instance mongoDB
• mongotop: monitoring des temps d’accès par collection
16
Import des données
• JSON
• mongoimport -d <base> -c <collection> [Link]

• CSV
• mongoimport --type csv --db <base> --collection <collection> --file [Link] --headerline

17
Clients graphiques
• MongoDB Compass :
• Outil graphique officiel développé par MongoDB pour interagir avec des bases
de données MongoDB (une version communautaire et une entreprise).
• Studio 3T:
• Client puissant conçu pour faciliter le travail avec MongoDB
• Une version gratuite et une payante avec plus de fonctionnalités
• Plugins pour les principaux IDE (vscode, intellij)

18
Studio 3T

19
MongoDB Compass

20
Scalabilité horizontal - sharding

21
Modèles de déploiement

22
JSON
• JavaScript Object Notation
• Les objets sont des tableaux associatifs.
• Ils sont composés de paires clé-valeur.

Exemple simple d’un objet JSON

23
JSON
• Les clés doivent être des chaînes de caractères.
• Les valeurs peuvent être l'une des suivantes :
• chaîne de caractères (par exemple, "Thomas")
• nombre (par exemple, 29, 3.7)
• true ou false
• null
• tableau (par exemple, [88.5, 91.3, 67.1])
• objet

24
Extended JSON
• Une version enrichie de JSON, utilisée par MongoDB
• Prend en charge des types de données supplémentaires
• Dates (ISODate), ObjectId, binaires, nombres entiers, nombres décimaux
(NumberDecimal)

25
BSON
MongoDB stocke les données sous format JSON binaire (BSON).
• Les pilotes MongoDB envoient et reçoivent les données dans ce format.
• Ils mappent le BSON vers des structures de données natives.
• BSON prend en charge tous les types de données JSON et plusieurs autres.
• BSON a été conçu pour être léger et efficace.

26
Documents, collections et bases de données

La combinaison database-collection définit un namespace:


• [Link]
• [Link]
27
Le champ _id
• Tous les documents doivent avoir un champ _id.
• Le _id est immuable.
• Si aucun _id n'est spécifié lors de l'insertion d'un document, MongoDB
ajoutera automatiquement le champ _id.
• MongoDB attribue un ObjectId unique comme valeur pour _id.
• La plupart des pilotes créent en fait l'ObjectId si aucun _id n'est spécifié.
• Le champ _id est unique dans une collection (namespace).
• Un ObjectId est une valeur hexadécimale de 12 octets (24 caractères en
représentation hexadécimale) et se décompose comme suit

28
Distributions MongoDB
• Distributions
• Linux
• Windows
• Images docker
• Mongo Atlas
• Une version entreprise et une version communautaire

29
CRUD – création et lecture
• Création d’un nouveau document
• insertOne({…}) :
• db.<COLLECTION>.insertOne({…})
• [Link]( { "name" : "Mongo" } )
• insertMany([{}, {}, …{}]):
• db.<COLLECTION>.insertMany([{}, {}, …{}])
• [Link]( [{ "name" : "Martin" }, { "name" : "Dupont" }] )

• Lecture des documents


• find({query}) : peut retourner plusieurs documents, tous ceux qui match à la requête passée en
paramètre.
• findOne({query}) : retourne le premier document qui match à la requête passée en paramètre.

{query} : c’est juste un objet javascript avec des paires clé/valeur

Exemple: [Link]({name: "Martin"})

30
CRUD – mise à jour
• Mise à jour des documents
• updateOne(<query>, <update>,<options>) : met à jour un document
• updateMany(<query>, <update>,<options>) : peut mettre à jour plusieurs
documents simultanément
- <query> : un objet qui spécifie les documents que vous souhaitez mettre à jour
- <update> : un objet qui spécifie ce que vous voulez mettre à jour, les opérations
que vous voulez effectuer, utilise les opérateurs de mise à jour.
- <options> : un objet avec les options de mise à jour

Exemple:

31
CRUD – suppression
• deleteOne({query}) : supprime un seul document qui satisfait le query
passé en paramètre
• deleteMany({query}) : peut supprimer plusieurs documents
• db.<COLLECTION>.drop(): supprime toute la collection
• [Link](): supprime toute la base de données

Exemple:

32
Le shell est un interpréteur JavaScript
for (i=1; i<=10000; i++) {
[Link]( { "a" : i } )
}
[Link]()

33
CRUD - Cursors
• Lorsque vous utilisez find(), MongoDB retourne un curseur.
• Un curseur est un pointeur vers l'ensemble des résultats.
• Vous pouvez parcourir les documents du résultat en utilisant next().
• Par défaut, le shell Mongo itère sur 20 documents à la fois.

34
CRUD – méthodes cursor
• count() : retourne le nombre de documents dans l'ensemble des résultats.
• limit() : limite l'ensemble des résultats au nombre de documents spécifié.
• skip() : ignore le nombre de documents spécifié.
• distinct(): db.movie_reviews.distinct( "title" )
• sort: [Link]().sort( { a : -1 } ) // tri décroissant sur l’attribut a

peu importe l'ordre dans lequel vous spécifiez skip() et sort() sur un
curseur, sort() s'exécute en premier.

35
Projection
• Inclure les champs avec fieldName: 1
• Tout champ non nommé sera exclu.
• A l'exception de _id, qui doit être explicitement exclu.
• Exclure des champs avec fieldName: 0
• Tout champ non nommé sera inclus.

36
Projection - Exemple
for (i=1; i<=20; i++) {
[Link](
{ "_id" : i, "title" : i, "imdb_rating" : i, "box_office" : i } )
}
[Link]()
// no "box_office"
[Link]( { "_id" : 3 }, { "title" : 1, "imdb_rating" : 1 } )
// no "imdb_rating"
[Link]( { "_id" : { $gte : 10 } }, { "imdb_rating" : 0 } )
// just "title"
[Link]( { "_id" : 4 }, { "_id" : 0, "title" : 1 } )
// just "imdb_rating", "box_office"
[Link]( { "_id" : 5 }, { _id : 0, "title" : 0 } )
// Can’t mix inclusion/exclusion except _id
[Link]( { "_id" : 6 }, { "title" : 1, "imdb_rating" : 0 } )

37
Framework d’agrégation
• Le framework d’agrégation est utilisé pour transformer et analyser les
données dans les collections MongoDB.
• Pour ceux qui sont habitués à SQL, l'agrégation regroupe les
fonctionnalités de plusieurs clauses SQL comme GROUP BY, JOIN, AS,
ainsi que plusieurs autres opérations permettant de traiter des
ensembles de données.
• Le framework d'agrégation est basé sur le concept de pipeline.

38
Pipeline d’agrégation
• Un pipeline d'agrégation est analogue à un pipeline Linux.
• Chaque étape du pipeline :
• Reçoit un ensemble de documents en entrée.
• Effectue une opération sur ces documents.
• Produit un ensemble de documents pour l'étape suivante.
• Un pipeline a la syntaxe suivante :

pipeline = [$stage1, $stage2, ...$stageN]


db.<COLLECTION>.aggregate( pipeline, { options } )

39
Aggregation stages
• Il existe de nombreuses étapes d'agrégation, par exemple:
• $match: similaire à find()
• $project : permet de modifier la structure des documents
• $sort : comparable à la méthode sort() du curseur
• $group : utilisé pour agréger les valeurs d'un champ à partir de plusieurs
documents
• $limit : permet de limiter le nombre de documents retournés
• $lookup : comme LEFT OUTER JOIN en SQL

40
Aggregation stages - Exemple

41
Accumulateurs d'Agrégation
• Les accumulateurs disponibles pour le stage $group:
• $sum: Calcule la somme des valeurs.
• $avg: Calcule la moyenne des valeurs.
• $first: Récupère la première valeur rencontrée.
• $last: Récupère la dernière valeur rencontrée.
• $max: Trouve la valeur maximale.
• $min: Trouve la valeur minimale.
• $push: Ajoute toutes les valeurs à un tableau.
• $addToSet: Ajoute des valeurs uniques à un tableau (élimine les doublons).

42
Accumulateurs d'Agrégation - Exemple

43
Index
• Définition : Une structure de données optimisée (B-tree) qui accélère
les recherches dans une collection.
• Fonctionnement : Organise les valeurs des champs indexés avec des
pointeurs vers les documents correspondants.
• Index par défaut : Chaque collection possède un index unique sur _id
créé automatiquement.
• Avantages : Amélioration des performances des requêtes en évitant
les scans complets de la collection.

44
Index – types et création
• Unique : Empêche les doublons.
• Composé : Sur plusieurs champs.
• Texte : Recherche full-text.
• TTL : Suppression automatique des documents.
• Sparse : Indexe uniquement les documents contenant un champ.
• Géospatial : Recherche sur coordonnées géographiques.

[Link]({ fieldName: 1 }) // Création d'un index croissant


[Link]({ fieldName: -1 }) // Création d'un index décroissant
45
Index – Bonnes pratiques
• Créez des index pour les champs souvent utilisés dans les filtres/sorts.
• Surveillez leur impact sur les performances d'écriture et l'espace disque.

[Link]({ fieldName: value }).explain("executionStats") => Pour


afficher le plan d’execution d’une requête avec des statistiques.

46
Validation du schéma
• On peut définir des règles de validation des données côté serveur

47
• Les documents sont écrits au format BSON : Format binaire de JSON.
• Un document représente une entité du système.
• Chaque collection de base de données est composée de zéro ou plusieurs
documents.
• Les documents d’une collection n’ont pas besoin de suivre le même format.
• Un document peut contenir des sous-documents.
• La représentation textuelle des champs est automatiquement enregistrée
au format binaire (BSON).
14
MongoDB

Read / Write concern


Analogie avec les SGBDR
15
Les outils et commandes MongoDB
• Mongod: le moteur de base
• Mongsh: le shell javascript
• Mongos: le contrôleur de Sharding
• Les outils d’import/export

• Write Concern: { w : 1 } • Write Concern: { w : 2 }


• mongoimport, mongoexport, mongodump, mongorestore, bsondump
• mongofiles: pour interagir avec GridFS (système de fichier intégré à
mongoDB)
• Mongostat: visualisation des stats d’une instance mongoDB
• mongotop: monitoring des temps d’accès par collection
16
Import des données
• JSON
• mongoimport-d <base> -c <collection> [Link]
• CSV
• mongoimport--type csv --db <base> --collection <collection> --file [Link] --headerline
17
Clients graphiques
• MongoDB Compass :
• Outil graphique officiel développé par MongoDB pour interagir avec des bases
de données MongoDB (une version communautaire et une entreprise).
• Studio 3T:
• Client puissant conçu pour faciliter le travail avec MongoDB
• Une version gratuite et une payante avec plus de fonctionnalités
• Plugins pour les principaux IDE (vscode, intellij)
18
Studio 3T
19
MongoDB Compass
20
Scalabilité horizontal - sharding
21
Modèles de déploiement 48
22
JSON
• JavaScript Object Notation
• Les objets sont des tableaux associatifs.
• Ils sont composés de paires clé-valeur.
Exemple simple d’un objet JSON

Vous aimerez peut-être aussi