sql >> Database teknologi >  >> NoSQL >> MongoDB

Kort-Reducer ydeevne i MongoDb 2.2, 2.4 og 2.6

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



  1. Mongoose near(...)-forespørgsel på 2dsphere-indekseret felt returnerer ikke gyldige resultater

  2. Redis nøglerumsmeddelelser med StackExchange.Redis

  3. Hvordan bruger du $set i MongoDB til at opdatere en indlejret værdi/indlejret dokument?

  4. Vedvarende data fra Redis til MongoDB til datalager