sql >> Database >  >> NoSQL >> MongoDB

Kaart-Reduce-prestaties in MongoDb 2.2, 2.4 en 2.6

Hier is de huidige staat van functionaliteit voor Map/Reduce in MongoDB

1) De meeste prestatiebeperkingen voor Map/Reduce zijn nog steeds aanwezig in MongoDB versie 2.2. De Map/Reduce-engine vereist nog steeds dat elk record wordt geconverteerd van BSON naar JSON, de daadwerkelijke berekeningen worden uitgevoerd met behulp van de embedded JavaScript-engine (die traag is), en er is nog steeds een enkele globale JavaScript-vergrendeling, die slechts één enkele JavaScript-thread toestaat om in één keer te draaien.

Er zijn enkele incrementele verbeteringen aangebracht in Map/Reduce voor Sharded-clusters. Het meest opvallende is dat de laatste Reduce-bewerking nu wordt verdeeld over meerdere shards en dat de uitvoer ook parallel wordt geshard.

Ik zou Map/Reduce niet aanbevelen voor realtime aggregatie in MongoDB versie 2.2

2) Vanaf MongoDB 2.2 is er nu een nieuw aggregatieraamwerk. Dit is een nieuwe implementatie van aggregatiebewerkingen, geschreven in C++ en nauw geïntegreerd in het MongoDB-framework.

De meeste Map/Reduce-taken kunnen worden herschreven om het Aggregation Framework te gebruiken. Ze werken meestal sneller (20x snelheidsverbetering vs. Map/Reduce is gebruikelijk in versie 2.2), ze maken volledig gebruik van de bestaande query-engine en u kunt meerdere aggregatieopdrachten parallel uitvoeren.

Als u realtime aggregatievereisten heeft, moet u eerst beginnen met het aggregatieraamwerk. Bekijk deze links voor meer informatie over het aggregatieraamwerk:

  • http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
  • http://docs.mongodb.org/manual/reference/aggregation/

3) Er zijn aanzienlijke verbeteringen aangebracht in Map/Reduce in MongoDB versie 2.4. De SpiderMonkey JavaScript-engine is vervangen door de V8 JavaScript-engine en er is niet langer een algemene JavaScript-lock, wat betekent dat meerdere Map/Reduce-threads tegelijkertijd kunnen worden uitgevoerd.

De Map/Reduce-engine is nog steeds aanzienlijk langzamer dan het aggregatieraamwerk, om twee belangrijke redenen:

  • De JavaScript-engine wordt geïnterpreteerd, terwijl het Aggregation Framework gecompileerde C++-code uitvoert

  • De JavaScript-engine vereist nog steeds dat elk document dat wordt onderzocht, wordt geconverteerd van BSON naar JSON; als u de uitvoer in een verzameling opslaat, moet de resultatenset vervolgens van JSON terug naar BSON worden geconverteerd

Er zijn geen significante veranderingen in Map/Reduce tussen 2.4 en 2.6.

Ik raad het gebruik van Map/Reduce nog steeds niet aan voor realtime aggregatie in MongoDB versie 2.4 of 2.6.

4) Als je Map/Reduce echt nodig hebt, kun je ook naar de Hadoop-adapter kijken. Hier vind je meer informatie:

  • 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. Mongo vindt duplicaten voor invoer voor twee of meer velden

  2. Mongo complexe sortering?

  3. Basisquerybewerkingen uitvoeren in MongoDB

  4. Hoe een veld in mongodb te verhogen?