Aller au contenu

Map-Reduce#

Introduction à Map-reduce#

Map-reduce : modèle de programmation pour traiter et générer de grands ensembles de données#

Avantages#

  • Traite de grandes quantités de données
  • Scalable et distribuable sur plusieurs machines
  • Parallélise les tâches pour améliorer les performances

Fonctions map et reduce#

Fonction map :#

  • Transforme chaque document en une ou plusieurs paires clé-valeur
  • Exemple : function() { emit(this.userId, this.score); }

Fonction reduce :#

  • Combine les valeurs associées à une même clé
  • Exemple : function(key, values) { return Array.sum(values); }

Les fonctions map et reduce sont écrites en JavaScript#

Utilisation de la commande db.collection.mapReduce(map, reduce, options) dans la CLI MongoDB#

Finalize et options supplémentaires#

Fonction finalize (optionnelle) :#

  • Traite les résultats après la phase de réduction
  • Exemple : calculer la moyenne des scores

Options supplémentaires :#

  • query : filtrer les documents avant le traitement
  • sort : trier les documents avant le traitement
  • limit : limiter le nombre de documents traités
  • out : spécifier la collection de sortie

Comparaison entre Map-reduce et les pipelines d'agrégation#

Map-reduce :#

  • Plus flexible, mais plus complexe
  • Convient pour les tâches distribuées et parallèles
  • Performances généralement inférieures aux pipelines d'agrégation

Pipelines d'agrégation :#

  • Plus simples et intuitifs
  • Performances généralement meilleures pour la plupart des cas d'utilisation
  • Moins adaptés aux tâches distribuées et parallèles

Exemples de Map-reduce#

Calculer la somme des scores par utilisateur :#

db.scores.mapReduce(map, reduce, { out: "sum_scores" })

Filtrer les documents avant le traitement :#

db.scores.mapReduce(map, reduce, { query: { game: "chess" }, out: "chess_scores" })

Trier les documents et limiter le nombre de documents traités :#

db.scores.mapReduce(map, reduce, { sort: { date: 1 }, limit: 100, out: "latest_scores" })