Module 5 (Section 2) :
Introduction
MongoDB
Riadh ZAAFRANI
D cembre 2020
1 re ann e MP2L
1
1
Plan
Introduction
Installation
Client Mongo
Requ tes MongoDB
Le mod le MapReduce
Frameworks MapReduce : MongoDB
Conclusion
2
2
1
Introduction
Dans ce cours nous manipulerons les grands
ensembles de documents organis s en bases de
donn es comme a existe sur le Web.
Le Web nest pas vraiment une base de donn es
mais cest un syst me distribu de documents, et un
cas-type de Big Data sil en est.
il
De plus,
sagit dune source dinformation
essentielle pour collecter des donn es, les agr ger
et les analyser.
Le syst me NoSQL qui sera pr sent est MongoDB
pour JSON.
3
3
Introduction
MongoDB est d velopp depuis 2007 par MongoDB.
Cette entreprise travaillait alors sur un syst me de
Cloud computing, informatique donn es largement
r parties, similaire au service Google App Engine de
Google.
Sa
premi re
version
consid r e
comme
industriellement viable a t la 1.4, en 2010.
MongoDB est une base de donn es open source
orient e
hautes
qui
performances, une haute disponibilit , et mise
l' chelle automatique.
documents
fournit
de
4
4
2
Introduction
Un enregistrement dans MongoDB est un document,
qui est une structure de donn es champ-valeur.
Les documents dans MongoDB sont similaires des
objets JSON. Les valeurs d'un champ peuvent inclure
d'autres documents, des tableaux, ou m me des
tableaux de documents.
{
matricule: 08p037,
nom: Ben Ahmed,
classe: 1Master-Info,
club:
}
5
5
Plan
Introduction
Installation
Client Mongo
Requ tes MongoDB
Le mod le MapReduce
Frameworks MapReduce : MongoDB
Conclusion
6
6
3
Installation
MongoDB est un syst me libre de droits (pour sa version de
base), t l chargeable :
https://www.mongodb.com/download-
center/community?jmp=docs
la derni re
T l charger
stable
version
correspondant
votre
syst me dexploitation et
ensuite
d compressez
larchive
ou
bien suivez les tapes
d'installation :
r cup r e
7
7
Installation sous Windows
MongoDB fonctionne sur plusieurs plates-formes,
que ce soit en architecture 32-bits comme en
architecture 64-bits.
On peut obtenir la version de Windows utilis e en
ouvrant l'invite de commande et en tapant les deux
commandes suivantes :
wmic os get caption
wmic os get osarchitecture
La premi re nous donne la version de Windows
la seconde nous
(Windows 7, Windows 8&) et
donne l'architecture (32-bits, 64-bits).
8
8
4
Configuration de
l'environnement MongoDB
Une fois linstallation termin e, vous obtenez un r pertoire
nomm mongo, agr ment du num ro de version et autres
indicateurs. Par exemple : C:\Program
Files\MongoDB\Server\4.2. Vous devriez ajouter C:\Program
Files\MongoDB\Server\4.2\bin; dans la variable
denvironnement PATH.
MongoDB n cessite un
r pertoire pour stocker toutes
les donn es. Par d faut, le
chemin de ce r pertoire
est: C:\Program
Files\MongoDB\Server\4.2\data\.
9
9
Configuration de
l'environnement MongoDB
lancer
MongoDB fonctionne en mode classique client/serveur.
la
le serveur, ex cutez
Pour
commande mongod qui se trouve dans bin, et cest tout.
Vous pouvez sp cifier un autre chemin pour les fichiers
de donn es en utilisant l'option --dbpath mongod.exe,
par exemple :
simplement
mongod --dbpath "C:\test\mongodb\data
10
10
5
Lancement de MongoDB
Pour lancer MongoDB, il faudra donc dabord lancer
le serveur via l'invite de commandes : mongod.
Si tout se passe bien, le d marrage du serveur se
concr tise pas des messages divers se terminant
par : waiting for connections on
port
processus
indique
mongod.exe a bien t ex cut .
27017
que
qui
le
Le serveur mongod est donc en attente sur le port
27017. Il traite les requ tes sur les donn es, g re
l'acc s aux donn es, et effectue des op rations de
traitement en arri re-plan.
11
11
Le client Mongo
Maintenant, il nous faut une application cliente.
Nous avons en gros deux possibilit s
:
Linterpr teur de commande mongo ou une
application graphique plus agr able utiliser.
Parmi
ces
derni res,
sont
choix
recommandables
une
application Web dadministration de MongoDB
peu pr s quivalente phpMyAdmin, et
RoboMongo, plus facile dinstallation.
RockMongo,
deux
12
12
6
Le client RoboMongo
RoboMongo
est
un
graphique
toutes
client
disponible pour
les
robomongo.org.
plate-formes
Cest sans doute le
privil gier.
choix
est
tr s
linstallation
simple,
loutil semble
assez complet et en
volution rapide.
Le client RoboMongo
13
14
13
14
7
Plan
Introduction
Installation
Client Mongo
Requ tes MongoDB
Le mod le MapReduce
Frameworks MapReduce : MongoDB
Conclusion
15
15
Publicité
Le client Mongo
Pour se connecter MongoDB, en utilisant linterpr teur de
commande, ouvrez une autre fen tre d'invite de commandes
et
larr ter, appuyez
sur Control + C dans le terminal o l'instance est lanc e.
tapez la commande mongo. Pour
Linterpr teur de commande se lance comme suit :
C:\mongo
MongoDB shell version: 3.2.10
connecting to: test
>
16
16
8
Le client Mongo
La connexion ne peut r ussir que si le service
MongoDB est lanc .
Par d faut, mongo recherche un serveur de
le port 27017 sur
base de donn es sur
l'interface locale.
Pour se connecter un serveur sur un port ou
une interface diff rente, utilisez les
param tres --port et --host.
17
17
Le client Mongo
Apr s le lancement de mongo, votre
session va utiliser par d faut la base de
donn es test .
Loutil mongo est en fait un interpr teur
javascript (ce qui est coh rent avec la
repr sentation JSON) et on peut donc lui
soumettre des instructions en Javascript,
ainsi que des commandes propres
MongoDB.
18
18
9
Le client Mongo
Voici quelques instructions de base :
db : pour avoir le nom de la base de donn es
courante.
show databases : pour avoir la liste des bases
de donn es.
use <database>: pour se placer dans une base.
Help : pour afficher l'aide.
19
19
Cr ation d'une collection et
insertion de documents
Une base est constitu e dun ensemble de collections,
l quivalent dune table en relationnel.
Pour cr er une collection : db.createCollection("groupes")
La liste des collections est obtenue par : show collections
Pour ins rer un document JSON dans une collection (ici,
groupes) :
db.groupes.insert ({"nom": "1Master info"})
Il existe donc un objet (javascript) implicite, db, auquel on
soumet des demandes dex cution de certaines
m thodes.
20
20
10
Cr ation d'une collection et
insertion de documents
Pour afficher le contenu dune collection :
db.groupes.find()
Cest un premier exemple dune fonction de recherche avec
MongoDB. On obtient des objets (javascript, encod s en
: ObjectId("5de2282d319c52285f46d661"),
JSON)
"nom" : "1Master info" }
"_id"
{
MongoDB associe un identifiant unique chaque document,
de nom conventionnel _id, et lui attribue une valeur si elle
nest pas indiqu e explicitement.
21
21
Cr ation d'une collection et
insertion de documents
Pour ins rer un autre document :
db.groupes.insert ({"produit": "Stylo", prix: 900, enStock:
true})
Vous remarquerez que la structure de ce document na
rien voir avec le pr c dent : il ny a pas de sch ma (et
donc pas de contrainte) dans MongoDB. On est libre de
tout faire (et m me de faire nimporte quoi).
Nous sommes partis pour mettre nimporte quel objet
dans notre collection groupes, ce qui revient reporter
les probl mes (contr les, contraintes,
la
structure) vers lapplication.
tests sur
22
22
11
Cr ation d'une collection et
insertion de documents
On peut affecter un identifiant explicitement :
db.groupes.insert ({_id: "1", "produit": "Crayon", prix:
400, enStock: true})
On peut compter le nombre de documents dans la
collection :
db.groupes.count()
Et finalement, on peut supprimer une collection :
db.groupes.drop()
23
23
Cr ation de la base
Nous allons ins rer des documents plus s rieux pour
d couvrir les fonctionnalit s de MongoDB.
Pour cela, nous travaillerons sur une base contenant des
:
t l chargeable
films
http://webscope.bdpedia.fr/
complets
24
24
12
Cr ation de la base
Notre base de films nous fournit des documents JSON,
comme celui-ci par exemple :
{
"_id": "movie:100",
"title": "The Social network",
"summary": "On a fall night in 2003, Harvard undergrad and
programming genius Mark Zuckerberg sits down at his
computer and heatedly begins working on a new idea. (...)",
"year": 2010,
"director": {"last_name": "Fincher","first_name": "David"},
"actors": [ {"first_name": "Jesse", "last_name": "Eisenberg"},
{"first_name": "Rooney", "last_name": "Mara"} ]
}
25
25
Cr ation de la base
Comme il serait fastidieux de
les ins rer un par un, nous
lutilitaire
allons
dimport
Il
prend en entr e un tableau
JSON contenant
la liste des
objets ins rer.
utiliser
de MongoDB.
Dans notre cas, nous allons
lexport JSON de la
le
utiliser
base Webscope
format est le suivant.
dont
[
{
"_id": "movie:1",
"title": "Vertigo",
"year": "1958",
"director": {
"_id": "artist:3",
"last_name": "Hitchcock",
"first_name": "Alfred",
"birth_date": "1899 },
"actors": [
{ "_id": "artist:15",
"first_name": "James",
"last_name": "Stewart",
},
{"_id": "artist:16",
"first_name": "Kim",
"last_name": "Novak",} ] },
{"_id": "movie:2",
"title": "Alien",
&}
]
26
26
13
Cr ation de la base
En supposant que ce tableau est sauvegard dans
movies.json, on peut importer la liste des films complets dans
la collection movies de la base test avec la commande
suivante
des
commandes :
linterpr teur
directement
partir
de
mongoimport -d test -c movies --file movies.json --jsonArray
Ne pas oublier largument jsonArray qui
sagit
dun
dimport
individuellement, et pas dun unique document JSON.
indique lutilitaire
cr er
dobjets
tableau
quil
27
27
Cr ation de la base
Pour importer la liste des artistes dans la collection artists de
la base test, on utilisera la commande :
mongoimport -d test -c artists --file artists.json --jsonArray
Enfin, pour importer la liste des films avec les r f rences aux artistes
dans la collection moviesRefs de la base test, on utilisera la
commande :
mongoimport -d test -c movies-refs --file moviesRefs.json --jsonArray
28
28
14
Plan
Introduction
Installation
Client Mongo
Requ tes MongoDB
Le mod le MapReduce
Frameworks MapReduce : MongoDB
Conclusion
29
29
Requ tes MongoDB
Comme nous lavons vu :
MongoDB nimpose pas de sch ma, ce qui peut tre
Publicité
vu comme un avantage initialement, mais sav re
rapidement p nalisant puisque la charge du contr le
des donn es est report e du c t de lapplication ;
MongoDB propose un langage dinterrogation qui lui
est propre (donc, non standardis ), pratique mais
limit ;
enfin
MongoDB
noffre
aucun
support
transactionnel.
30
30
15
Requ tes MongoDB
Le langage de requ te sur des collections
est sp cifique MongoDB.
Cest un langage de recherche dit par
motif (pattern) : Il consiste interroger
(le
une collection en donnant un objet
motif/pattern,
en JSON) dont chaque
attribut est interpr t comme une contrainte
sur la structure des objets rechercher.
31
31
S lections
Commen ons par la base : on veut parcourir
toute une collection. On utilise alors find()
dans argument.
db.movies.find()
Pour am liorer laffichage, on peut utiliser la
commande pretty : db.movies.find().pretty()
Si
je souhaite afficher
suivants, il me suffit de taper it.
les documents
32
32
16
S lections
Sil y a des millions de documents, cela risque
de prendre du temps... Dailleurs, comment
savoir combien de documents comprend le
r sultat ?
db.movies.count()
33
33
S lections
Comme en SQL ( tendu), les options skip et limit
le r sultat. La requ te
permettent de paginer
suivante affiche 12 documents partir du dixi me
inclus.
db.movies.find().skip(9).limit(12)
Implicitement, cela suppose quil existe un ordre
sur le parcours des documents.
Par d faut, cet ordre est dict par le stockage
physique : MongoDB fournit les documents dans
lordre o il les trouve (dans les fichiers).
34
34
17
S lections
On peut trier explicitement, ce qui rend le r sultat
plus d terministe. La requ te suivante trie les
documents sur
le titre du film, puis pagine le
r sultat.
db.movies.find().sort({"title":1}).skip(9).limit(12)
La sp cification du tri repose sur un objet JSON, et
ne prend en compte que les noms dattributs sur
lesquels seffectue le tri.
La valeur (ici, celle du titre) sert indiquer si on trie
de mani re ascendante (valeur 1) ou descendante
(valeur -1).
35
35
S lections
Attention, trier nest pas anodin.
En particulier, tout tri implique que le syst me
constitue lint gralit du r sultat au pr alable,
ce qui induit une latence (temps de r ponse)
potentiellement lev e.
Sans
les
documents au fur et mesure quil les trouve.
le syst me peut d livrer
tri,
36
36
18
Crit res de recherche
Si on conna t
lidentifiant, on effectue la recherche
ainsi :
db.movies.find ({"_id": "movie:2"})
Une requ te sur lidentifiant ram ne (au plus) un seul
document. Dans un tel cas, on peut utiliser findOne :
db.movies.findOne ({"_id": "movie:2"})
Cette fonction renvoie toujours un document (au plus),
alors que la fonction find renvoie un curseur sur un
ensemble de documents (m me si cest un singleton).
La diff rence est surtout importante quand on utilise
une API pour acc der MongoDB avec un langage
de programmation.
37
37
Crit res de recherche
Sur le m me mod le, on peut interroger nimporte
quel attribut.
db.movies.find ({"title": "Alien"})
a marche bien pour des attributs atomiques (une
seule valeur), mais comment faire pour interroger
des objets ou des tableaux imbriqu s ?
38
38
19
Crit res de recherche
On utilise dans ce cas des
chemins, un peu la XPath,
mais avec une syntaxe plus
orient -objet.
Voici comment on recherche
les films de David Fincher.
db.movies.find
({"director.last_name":
"Fincher"})
39
{ "_id" : "movie:14",
"title" : "Seven",
"year" : 1995,
"genre" : "crime", "summary" :
"A New York, un criminel anonyme
a d cid de commettre 7 meurtres
bas s.... ",
"country" : "USA",
"director" : {
"_id" : "artist:31",
"last_name" : "Fincher",
"first_name" : "David",
"birth_date" : "1962" },
"actors" : [ {
"_id" : "artist:18",
"first_name" : "Kevin",
"last_name" : "Spacey",
"birth_date" : "1959", "role" :
"Doe"
}&. ]}
39
Crit res de recherche
Et pour les acteurs, qui sont
eux-m mes dans un tableau
? Ca fonctionne de la m me
mani re.
db.movies.find
({"actors.last_name":
"Spacey"})
La requ te sinterpr te donc
comme : Tous les films dont
lun des acteurs se nomme
Spacey.
{ "_id" : "movie:14",
"title" : "Seven",
"year" : 1995,
"genre" : "crime", "summary" :
"A New York, un criminel anonyme
a d cid de commettre 7 meurtres
bas s.... ",
"country" : "USA",
"director" : {
"_id" : "artist:31",
"last_name" : "Fincher",
"first_name" : "David",
"birth_date" : "1962" },
"actors" : [ {
"_id" : "artist:18",
"first_name" : "Kevin",
"last_name" : "Spacey",
"birth_date" : "1959", "role" :
"Doe"
}&. ]}
40
40
20
Crit res de recherche
Conform ment aux principes du semi-structur , on accepte
sans protester la r f rence des attributs ou des chemins
qui nexistent pas.
En fait, dire ce chemin nexiste pas na pas grand sens
puisquil ny a pas de sch ma, pas de contrainte sur la
structure des objets, et que donc tout chemin existe
potentiellement : il suffit de le cr er.
La requ te suivante ne ram ne rien, mais ne g n re pas
derreur.
db.movies.find ({"actor.last_name": " Spacey"})
Important : Contrairement une base relationnelle, une base
semi-structur e ne proteste pas quand on fait une faute de
41
frappe sur des noms dattributs.
41
Crit res de recherche
Quelques raffinements permettent de d passer la limite sur le
pr dicat d galit implicitement utilis ici pour comparer les
crit res donn s et les objets de la base.
Pour
les cha nes de caract res, on peut
introduire des
expressions r guli res.
Tous les films dont le titre commence par Re ?
db.movies.find ({"title": /^Re/}, {"actors": null, "summary": 0} )
Pas dapostrophes autour de lexpression r guli re.
On peut aussi effectuer des recherches par intervalle.
db.movies.find( {"year": {$gte: 2000, $lte: 2005} },{"title": 1})
Il nest pas possible dutiliser les signes habituels (>, >=, <,
<=, !=). MongoDB propose la place des op rateurs d di s
42
($gt, $gte, $lt, $lte, $ne).
42
21
Projections
Jusqu pr sent, les requ tes ram nent lint gralit
des objets satisfaisant les crit res de recherche.
On peut aussi faire des projections, en passant un
second argument la fonction find() :
db.movies.find ({"actors.last_name": "Tarantino"},
{"title": true, "actors": 'j'} )
Le second argument est un objet JSON dont les
attributs sont ceux conserver dans le r sultat.
43
43
Publicité
Projections
La valeur des attributs dans cet objet-projection ne
prend que deux interpr tations : Toute valeur autre
que 0 ou null
indique que lattribut doit tre
conserv . Si on choisit au contraire dindiquer les
attributs exclure, on leur donne la valeur 0 ou
null.
Par exemple, la requ te suivante retourne les films
sans les acteurs et sans le r sum .
db.movies.find ({"actors.last_name": "Tarantino"},
{"actors": null, "summary": 0})
44
44
22
Projections
Dans une projection, la requ te renvoie galement
le champ _id. Cest le fonctionnement normal de
la commande find qui renvoie syst matiquement
la cl du document.
Si lon souhaite lexclure, il faut le pr ciser dans la
commande.
db.movies.find ({"actors.last_name": "Tarantino"},
{"title": 1, "actors": 1, "_id" : 0})
45
45
Op rateurs ensemblistes
Les op rateurs du langage SQL in, not in, any et all se
retrouvent dans le langage dinterrogation.
La diff rence, notable, est que SQL applique ces op rateurs
des relations (elles-m mes obtenues par des requ tes)
alors que dans le cas de MongoDB, ce sont des tableaux
JSON.
MongoDB ne permet pas dimbriquer des requ tes.
Voici un premier exemple : on cherche les films dans
lesquels joue au moins un des artistes dans une liste (on
suppose que lon conna t lidentifiant).
db.movies.find({"actors._id": {$in: ["artist:34","artist:98","artist:1"]}})
46
46
23
Op rateurs ensemblistes
Gardez cette recherche en m moire : elle sav rera
utile pour contourner
labsence de jointure en
MongoDB. Le in exprime le fait que lune des valeurs
du premier tableau (actors._id) doit tre gale lune
des valeurs de lautre. Il correspond implicitement, en
SQL, la clause any.
Pour exprimer le fait que toutes les valeurs du premier
tableau se retrouvent dans le second (en dautres
termes, une inclusion), on utilise la clause all.
db.movies.find({"actors._id": {$all: ["artist:23","artist:147"]}})
47
47
Op rateurs ensemblistes
Le not in correspond lop rateur $nin.
db.movies.find({"actors._id": {$nin:
["artist:11","artist:14","artist:15"]}})
Comment trouver les titres des films qui
nont pas dattribut summary ?
db.movies.find({"summary": {$exists:
false}}, {"title": 1})
48
48
24
Op rateurs Bool ens
Par d faut, quand on exprime plusieurs
crit res, cest une conjonction (and) qui est
appliqu e. On peut lindiquer explicitement.
Voici
la syntaxe (les films tourn s avec
Leonardo DiCaprio en 1997) :
db.movies.find( { $and : [ {"year": 1997},
{"actors.last_name": "DiCaprio"} ] } )
Lop rateur and sapplique un tableau de
conditions.
49
49
Op rateurs Bool ens
Bien entendu, il existe un op rateur or
avec la m me syntaxe.
Les films parus en 1997 ou avec
Leonardo DiCaprio.
db.movies.find({$or : [ {"year": 1997},
{"actors.last_name": "DiCaprio"} ] } )
50
50
25
Jointures
Grosso modo,
Voici pour lessentiel en ce qui concerne les
recherches portant sur une collection et
consistant s lectionner des documents.
on
la m me
expressivit que pour SQL dans ce cas. Que
faire quand on doit croiser des informations
pr sentes dans plusieurs collections ? En
relationnel, on effectue des jointures.
obtient
Avec Mongo, il faut bricoler.
51
51
Jointures
La jointure, au sens de : associer des objets
distincts, provenant en g n ral de plusieurs
collections, pour appliquer des crit res de recherche
crois s, nexiste pas en MongoDB.
est
coh rente
Cest une limitation tr s importante du point de vue
de la gestion de donn es. On peut consid rer
quelle
approche
documentaire dans laquelle les documents sont
suppos s ind pendants les uns des autres, avec
une description interne suffisamment riche pour que
toute recherche porte sur le contenu du document
lui-m me.
avec
une
52
52
26
Jointures
imaginer
Cela tant, on peut
toutes sortes de
situations o une jointure est n cessaire dans une
application de traitement de donn es. Le serveur ne
sachant pas effectuer de jointures, on en est r duit
les faire c t client, comme illustr sur la figure :
53
53
Jointures
Cela revient essentiellement appliquer lalgorithme
de jointures par boucle imbriqu es en stockant des
donn es temporaires dans des structures de
donn es sur le client, et en effectuant des changes
r seaux entre le client et le serveur, ce qui dans
lensemble est inefficace.
Comme linterpr teur mongo permet de programmer
la
en Javascript, nous pouvons en fait
m thode assez simplement.
illustrer
Consid rons la requ te : Donnez tous les films
dont le directeur est Clint Eastwood.
54
54
27
Jointures
Nous travaillons sur une base dans laquelle un
film ne contient que la r f rence au metteur en
sc ne, ce qui vite les redondances, mais
complique la reconstitution de linformation.
La premi re tape dans la jointure c t client
consiste chercher lartiste Clint Eastwood et
le stocker dans lespace m moire du client (dans
une variable, pour dire les choses simplement).
eastwood = db.artists.findOne({"first_name":
"Clint", "last_name": "Eastwood"})
55
55
Jointures
On dispose maintenant dun objet eastwood. Une
seconde requ te va r cup rer les films dirig s par
cet artiste.
db.moviesRefs.find({"director._id": eastwood[_id]},
{"title": 1})
le
Voil
principe. Voyons maintenant
plus
g n ralement comment on effectue l quivalent des
jointures en SQL.
Prenons la requ te suivante :
select m.titre, a.* from Movie m, Artist a
where m.id_director = a.id
56
56
28
Jointures
On veut donc les titres des films et le r alisateur. On
va devoir coder, du c t client, un algorithme de
jointure par boucles imbriqu es. Le voici, sous le
shell de MongoDB (et donc en programmation
javascript).
var lesFilms = db.moviesRefs.find();
while (lesFilms.hasNext()) {
var film = lesFilms.next();
var mes = db.artists.findOne({"_id": film.director._id});
printjson(film.title);
printjson(mes);
}
57
57
Jointures
On a donc une boucle, et une requ te
imbriqu e, ex cut e autant de fois quil y a de
films.
Cest exactement la m thode qui serait utilis e
les
le serveur si ce dernier
implantait
par
jointures.
Lex cuter du c t client induit un surco t en
programmation, et en changes r seau entre
le client et le serveur.
58
58
29
Exercice : requ tes sur la base des films
Tous les titres ;
Tous les titres des films parus apr s 2000 ;
Le r sum de Spider-Man ;
Qui est le metteur en sc ne de Gladiator ?
Titre des films avec Kirsten Dunst ;
Quels films ont un r sum ?
Les films qui ne sont ni des drames ni des
com dies.
59
59
Exercice : requ tes sur la base des films
Affichez les titres des films et les noms des
acteurs.
Dans quels films Clint Eastwood est-il acteur
mais pas r alisateur (aide : utilisez lop rateur
de comparaison $ne).
Difficile : Comment chercher les films dont le
metteur en sc ne est aussi un acteur ? Pas
s r que ce soit possible sans recourir une
auto-jointure, c t client...
Publicité
60
60
30
Plan
Introduction
Installation
Client Mongo
Requ tes MongoDB
Le mod le MapReduce
D couverte laide dun exemple
Le mod le MapReduce en termes informatiques
Frameworks MapReduce : MongoDB
Conclusion
61
61
MapReduce
Nous
plus
complet
abordons
maintenant
un
processus
le
traitement dune collection, que nous
allons appeler cha ne de traitement par
traduction
processing
pipelines.
data
pour
de
62
62
31
MapReduce
Le principe g n ral est de soumettre chaque document
dune collection une s quence dop rations, comme par
exemple :
un filtrage, en ne gardant
le document que sil satisfait
certains crit res ;
une restructuration, en changeant la forme du document ;
une annotation, par ajout au document de propri t s
calcul es ;
un regroupement avec dautres documents sur certains
crit res ;
des op rations dagr gation sur
des
groupes
de
documents.
63
63
MapReduce
La sp cification dune cha ne de traitement sappuie
sur un paradigme nomm MapReduce que nous
rencontrerons de mani re r currente.
Cette partie du cours propose une pr sentation
d taill e du principe de calcul MapReduce, avec
une illustration pratique avec MongoDB.
MapReduce nest vraiment int ressant que dans un
contexte distribu . Nous nous en tenons au
contexte centralis (un seul serveur) dans ce cours,
ce qui permet de se familiariser avec les concepts et
la pratique dans un cadre simple.
64
64
32
Plan
Introduction
Installation
Client Mongo
Requ tes MongoDB
Le mod le MapReduce
D couverte laide dun exemple
Le mod le MapReduce en termes informatiques
Frameworks MapReduce : MongoDB
Conclusion
65
65
MapReduce d mystifi
Nous proposons une d couverte avec les mains, en
tudiant comment cuisiner quelques recettes simples
avec un robot MapReduce.
Vous savez faire du jus de pomme ? Cest simple :
L pluchage : il faut plucher les pommes une par une ;
toutes les pommes dans un
Le pressage : on met
pressoir, et on r cup re le jus.
66
66
33
Un jus de pomme MapReduce
Comme notre but est de commencer le formaliser en un
mod le que nous appellerons la fin MapReduce, nous
distinguons la fronti re entre les deux phases, et
les
t ches effectu es de chaque c t .
gauche, nous avons donc latelier de transformation :
il consiste en un agent, l plucheur, qui prend une pomme
dans son panier gauche, produit une pomme pluch e
dans un second panier droite, et r p te la m me action
jusqu ce que le panier de gauche soit vide.
droite nous avons latelier dassemblage : on lui confie
il produit du jus de
un tas de pommes pluch es et
pomme.
67
67
Un jus de pomme MapReduce
Nous pouvons d j tirer deux le ons sur les caract ristiques
essentielles de notre processus l mentaire.
La premi re porte sur latelier de transformation qui applique
une op ration individuelle chaque produit.
Le on 1 :
latelier de transformation est centr sur
les
pommes. Dans latelier de transformation, les pommes sont
pluch es individuellement et dans nimporte quel ordre.
La seconde le on porte sur latelier dassemblage qui, au
produits
transformation
une
aux
contraire,
regroup s : ici, des tas de pommes.
applique
Le on 2 : latelier dassemblage est centr sur les tas de
pommes. Dans latelier dassemblage, on applique des
68
transformations des ensembles de pommes.
68
34
Un jus de pomme MapReduce
Tout cela est assez l mentaire, voyons si nous
pouvons faire mieux en introduisant une premi re
variante. Au lieu de cuire des pommes enti res, on
pr f re les couper au pr alable en quartiers.
une
devient
phase
La
phase
d pluchage
d pluchage/d coupage.
69
69
MapReduce d mystifi
Cela ne change pas grand chose. Au lieu davoir deux tas
identiques gauche et droite avec des pommes, le cuisinier a un
tas avec p pommes gauche et un autre tas avec 4p quartiers de
pommes droite. Cela nous permet quand m me de tirer une
troisi me le on.
Le on 3 : la transformation peut modifier le nombre et la nature des
produits. La premi re phase nest pas limit e une transformation
un pour un des produits consomm s. Elle peut prendre en entr e
des produits dune certaine nature (des pommes), sortir des produits
dune autre nature (des quartiers de pomme pluch es), et il peut
ny avoir aucun rapport fixe entre le nombre de produits en sortie et
le nombre de produits en entr e (on peut
jeter des pommes
pourries, couper une pomme en 4 ou 6 ou 8, etc.)
70
70
35
Beaucoup de jus de pomme
Nous avons ainsi notre premier processus
identifi ses
MapReduce, et nous avons
caract ristiques principales.
Il devient possible de montrer comment passer
grande chelle dans la production de jus de
pomme, sans changer le processus.
Votre jus de pomme est tr s bon et vous devez
en produire beaucoup : une seule personne ne
suffit plus la t che.
71
71
Beaucoup de jus de pomme
Heureusement
la m thode
employ e
se
g n ralise
facilement une brigade de n cuisiniers.
R partissez votre tas de pommes en n sous-tas, affect s
chacun un cuisinier ;
Chaque cuisinier effectue la t che d pluchage/d coupage
comme pr c demment ;
Regroupez les quartiers de pomme et pressez-les.
Il se peut quun pressoir ne suffise plus : dans ce cas
les
r partissez quitablement
affectez c pressoirs et
quartiers dans chacun.
Petit inconv nient : vous obtenez plusieurs f ts de jus de
pomme, un par pressoir, avec une qualit ventuellement
72
variable. Ce nest sans doute pas tr s grave.
72
36
Beaucoup de jus de pomme
latelier
Dans
de
transformation, vous avez n
cuisiniers qui, chacun,
font
exactement
la m me chose
quavant : ils produisent des
tas de quartiers de pomme.
Dans latelier dassemblage,
vous avez r pressoirs : un au
minimum, 2, 3 ou plus selon
les besoins.
Il ny aucune raison dimposer
comme contrainte que le
nombre de pressoirs soit gal
au nombre de cuisiniers.
73
73
Beaucoup de jus de pomme
Vous avez ainsi parall lis votre production de jus de
pomme.
Vous pouvez m me pr tendre que la rentabilit conomique
est pr serv e. Si un cuisinier pluche 50 Kgs de pomme par
(avec le mat riel correspondant)
jour, 10 cuisiniers
produiront 500 Kgs par jour !
Nous dirons que le processus est scalable, et cela vaut une
quatri me le on.
Le on 4 : parall lisation e...