Introduction à MongoDB

Database Systems · notes

Voir tous les documents en bases de données

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...