INTRODUCTION
Mme Ines Slimene
2016-2017 [Link]@[Link]
Plan module
Introduction
Base de données orienté document : MongoDB
Base de données orienté clé/valeur : Redis
Base de données orienté colonne : Cassandra
Base de données orienté graphe : Neo4j
19/12/2018 INTRODUCTION MONGODB 2
Plan
Modèle JSON et Organisation
Modèlisation
Replica Set
Sharding
Sauvegarde et restauration des données
19/12/2018 INTRODUCTION MONGODB 3
Modèle et
organisation
19/12/2018 INTRODUCTION MONGODB 4
Introduction
Un document est la représentation d'une donnée en BSON.
BSON = Binary JSON.
Extension du JSON (support officiel du type Date, ... ).
Pas de schéma, pas de relation, pas de transaction.
19/12/2018 MODÉLISATION 5
Modèle JSON
JSON (Javascript Object Notation) est le format de sérialisation des objets
Javascript.
Avantage principal : il est possible de le parser directement sous la forme
d’un objet du langage (javascript, mais aussi tous les langages de scripts,
voire Java ou C++)
Une valeur est soit une chaîne de caractère, un numérique, un Booléen, un
objet ou un tableau.
Un objet est une liste non-ordonnée de paires (clé, valeur).
Exemple: {first_name: ‘Joe’, last_name: ‘Doe’}
Un tableau est une liste ordonnée de valeurs.
[“doe@[Link]”, “[Link]@[Link]”,“doej@[Link]”]
19/12/2018 MODÉLISATION 6
Exemple avec JSON
Point de départ : listes associatives, i.e., des enregistrements avec des
paires (clé, valeur).
{nom: "Alan", tél: 2157786, email: "agb@[Link]"}
Extension naturelle : les valeurs sont elles-mêmes d’autres structures.
{nom: {prénom: "Alan", famille: "Black"},tél: 2157786, email:
"agb@[Link]"}
Autre exemple: imbrication de listes.
{name: "Alan", téls: [2157786, 2498762] }
19/12/2018 MODÉLISATION 7
Organisation
Un serveur MongoDB est composé de bases de données.
Une base de données contient des collections.
Les collections possèdent les documents.
Chaque document possède un identifiant unique généré par MongoDB,
le champ _id.
19/12/2018 MODÉLISATION 8
Organisation
RDBMS MongoDB
Database Database
Table, View Collection
Row Document (JSON, BSON)
Column Field
Index Index
Join Embedded Document
Foreign Key Reference
Partition Shard
19/12/2018 MODÉLISATION 9
Documents
Un document est l’équivalent d’une ligne dans une base de données
SQL avec quelques différences :
◦ Les documents sont sans schéma
◦ Les documents utilise le syntaxe BSON
◦ La taille max d’un document est 16 mégabytes
◦ Non Relationnel
19/12/2018 MODÉLISATION 10
Documents
Exemple :
{
name : ‘MongoDB’,
type : ‘database’,
count : 1,
info :{
x : 203,
y : 102
}
}
19/12/2018 MODÉLISATION 11
Modélisation: quelques règles
simples
19/12/2018 MODÉLISATION 12
Modélisation: quelques règles
simples
19/12/2018 MODÉLISATION 13
Modélisation: quelques règles
simples
19/12/2018 MODÉLISATION 14
Modélisation: quelques règles
simples
19/12/2018 MODÉLISATION 15
Modélisation: quelques règles
simples
Ne pas oubliez d’en tenir compte !
● “J’ai besoin de l’ensemble des données à chaque requête”
○ Mettez tout dans une seule collection
● “J’ai besoin d’en avoir seulement une partie”
○ Faites plusieurs collections et des références
○ Ex: les posts d’un blog et leurs commentaires :
■ 2 besoins : affichage liste des posts + affichage post avec
commentaires
■ Modélisation avec 2 collections (posts, comments)
19/12/2018 MODÉLISATION 16
Références entre docs
Avantages à séparer dans plusieurs docs ?
● Flexibilité
○ Changement sur une collection sans impact sur les autres
● Cardinalité forte / gros document:
○ Attention à la place mémoire
○ Taille max des docs: 16Mo
Désavantages à séparer dans plusieurs docs ?
● On risque d’avoir à gérer des jointures dans l’application, compliqué !
19/12/2018 MODÉLISATION 17
Sharding et
Réplica Set
19/12/2018 INTRODUCTION MONGODB 18
Réplica Set : cohérence
éventuelle
Master Slave Slave Slave
Replica set
La lecture des données est effectuée dans le master.
La lecture peut être effectuée a partir du slave mais problème de
consistance (la réplication est asynchrone) => cohérence éventuelle
19/12/2018 INTRODUCTION MONGODB 19
Réplica set : Élection
Type de nœud:
◦ regular : a full copy of data & voting & ready to be primary
◦ Passive : a full copy of data & voting
◦ arbiter : voting & no data replicated (ne peut pas être un master)
◦ Hidden : ne peut pas être un master
19/12/2018 INTRODUCTION MONGODB 20
Réplica set : Failover
Master Slave Slave Slave
écriture
Serveur d’application
19/12/2018 INTRODUCTION MONGODB 21
Réplica set : Failover
Master Slave Slave Slave
Élection
écriture
Serveur d’application
19/12/2018 INTRODUCTION MONGODB 22
Réplica set : Failover
Suite a la reprise de l’ancien master, il essaye de synchroniser avec le nouveau master. S’il trouve
qu’il a des données en plus il doit effectuer un Rollback pour qu’il soit a niveau avec les autres
nœuds.
Slave Master Slave Slave
Rollback
écriture
Serveur d’application
19/12/2018 INTRODUCTION MONGODB 23
Sharding (segmentation)
Répartition des données en segments et sauvegarde de chaque
segment dans un serveur (shard)
La répartition peut être effectuée de façon arbitraire ou bien selon un
sharding_key
◦ Arbitraire : parcourir tous les serveurs pour trouver une information.
◦ Shard_key: tableau de correspondance entre shard_key et segment de
donnée (recherche facile de l’information)
◦ Exemple : collection orders, order_id peut être considérer comme shard_key
19/12/2018 INTRODUCTION MONGODB 24
Sharding
Shard 2
Shard 1 Shard 3
mongos
Shard 0
application
19/12/2018 INTRODUCTION MONGODB 25
Implication du sharding
Tout document doit contenir un shard key
Le shard key est immuable (une fois défini on ne peut plus le modifier)
Choix de shard key:
◦ cardinalité suffisante (une valeur qui ne figure que 3 fois ne peut pas être
repartie sur 100 shard)
◦ Incrémentation continue (id ou timestamp): plage de valeur de min au max.
pour les valeurs qui dépassent le max elles vont être insérer dans le dernier
shard d’où problème de répartition des données.
Index doit commencer par le shard key (exemple : supposant que
student_id est le shard key index(student_id,class_id)
Shard key doit être spécifié comme multiple (cas update multi)
Pas de shard key : problème de recherche dans tout les segments
19/12/2018 INTRODUCTION MONGODB 26
Transfert de
données
19/12/2018 INTRODUCTION MONGODB 27
Import/export
mongoexport et mongoimport sont deux commandes utilisées pour
l’import et l’export de données a partir de fichiers JSON ou CSV.
Exemple :
◦ Export sous format json
mongoexport --db test --collection people –out [Link]
◦ Export sous format csv
mongoexport --db test --collection people --csv --fields nom,salaire,dept --out [Link]
19/12/2018 INTRODUCTION MONGODB 28
Import/export
Importer à partir d’un fichier json
mongoimport --db base --file [Link]
Importer a partir d’un fichier csv
mongoimport --db base --type csv --file [Link] --headerline
19/12/2018 INTRODUCTION MONGODB 29
Sauvegarde et récupération
Sauvegarde :
Mongodump : permet de sauvegarder une partie ou la totalité de la base dans
un dossier dump.
mongodump –help : visualiser les options de mongodump
◦ --db DBNAME sauvegarde de la base DBNAME
◦ --collection COLLECTIONNAME sauvegarde la collection COLLECTIONNAME
Exemple :
mongodump --db test --out backup
→ sauvegarder la base test dans le répertoire backup
19/12/2018 INTRODUCTION MONGODB 30
Sauvegarde et récupération
Récupération :
mongorestore : récupère les données a partir d’un fichier BSON
--db et--collection permettent de récupérer une base et une collection
spécifique.
Exemple:
mongorestore --db test --collection people backup/test/[Link]
→récupérer la collection people dans la base test a partir du fichier
[Link]
19/12/2018 INTRODUCTION MONGODB 31