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" })