Her er den aktuelle funktionalitetstilstand for Map/Reduce i MongoDB
1) De fleste af ydeevnebegrænsningerne for Map/Reduce forbliver stadig i MongoDB version 2.2. Map/Reduce-motoren kræver stadig, at hver post bliver konverteret fra BSON til JSON, de faktiske beregninger udføres ved hjælp af den indlejrede JavaScript-motor (som er langsom), og der er stadig en enkelt global JavaScript-lås, som kun tillader en enkelt JavaScript-tråd at køre på et enkelt tidspunkt.
Der har været nogle trinvise forbedringer til Kort/Reducer for sharded klynger. Mest bemærkelsesværdigt er den endelige Reducer-operation nu fordelt på tværs af flere shards, og outputtet er også shardet parallelt.
Jeg vil ikke anbefale Map/Reduce til aggregering i realtid i MongoDB version 2.2
2) Fra og med MongoDB 2.2 er der nu en ny aggregeringsramme. Dette er en ny implementering af aggregeringsoperationer, skrevet i C++ og tæt integreret i MongoDB-rammen.
De fleste Kort/Reducer-job kan omskrives til at bruge Aggregation Framework. De kører normalt hurtigere (20x hastighedsforbedring vs. Kort/Reducer er almindeligt i version 2.2), de gør fuld brug af den eksisterende forespørgselsmotor, og du kan køre flere aggregeringskommandoer parallelt.
Hvis du har krav til aggregering i realtid, er det første sted at starte med aggregeringsrammen. For mere information om aggregeringsrammen, tag et kig på disse links:
- http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
- http://docs.mongodb.org/manual/reference/aggregation/
3) Der er sket betydelige forbedringer i Map/Reduce i MongoDB version 2.4. SpiderMonkey JavaScript-motoren er blevet erstattet af V8 JavaScript-motoren, og der er ikke længere en global JavaScript-lås, hvilket betyder, at flere Kort/Reducer-tråde kan køre samtidigt.
Kort/Reducer-motoren er stadig betydeligt langsommere end aggregeringsrammen af to hovedårsager:
-
JavaScript-motoren fortolkes, mens Aggregation Framework kører kompileret C++-kode
-
JavaScript-motoren kræver stadig, at hvert dokument, der undersøges, konverteres fra BSON til JSON; hvis du gemmer outputtet i en samling, skal resultatsættet derefter konverteres fra JSON tilbage til BSON
Der er ingen væsentlige ændringer i Kort/Reducer mellem 2.4 og 2.6.
Jeg anbefaler stadig ikke at bruge kort/reducer til realtidssammenlægning i MongoDB version 2.4 eller 2.6.
4) Hvis du virkelig har brug for Map/Reduce, kan du også se på Hadoop Adapter. Der er flere oplysninger her:
- http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
- http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
- http://www.mongodb.org/display/DOCS/Hadoop+Quick+Start