sql >> Databasteknik >  >> NoSQL >> MongoDB

Karta-minska prestanda i MongoDb 2.2, 2.4 och 2.6

Här är det aktuella funktionsläget för Map/Reduce i MongoDB

1) De flesta av prestandabegränsningarna för Map/Reduce finns fortfarande kvar i MongoDB version 2.2. Map/Reduce-motorn kräver fortfarande att varje post konverteras från BSON till JSON, de faktiska beräkningarna utförs med den inbäddade JavaScript-motorn (som är långsam), och det finns fortfarande ett enda globalt JavaScript-lås som bara tillåter en enda JavaScript-tråd att köra på en enda gång.

Det har gjorts några stegvisa förbättringar av Map/Reduce för sönderdelade kluster. Mest anmärkningsvärt är att den slutliga Reduce-operationen nu är fördelad över flera skärvor, och utdata skärs också parallellt.

Jag skulle inte rekommendera Map/Reduce för realtidsaggregation i MongoDB version 2.2

2) Från och med MongoDB 2.2 finns det nu ett nytt aggregationsramverk. Detta är en ny implementering av aggregeringsoperationer, skriven i C++ och tätt integrerad i MongoDB-ramverket.

De flesta Map/Reduce-jobb kan skrivas om för att använda Aggregation Framework. De körs vanligtvis snabbare (20x hastighetsförbättring jämfört med Map/Reduce är vanligt i version 2.2), de utnyttjar den befintliga frågemotorn fullt ut och du kan köra flera aggregeringskommandon parallellt.

Om du har aggregeringskrav i realtid är det första stället att börja med aggregeringsramverket. För mer information om aggregeringsramverket, ta en titt på dessa länkar:

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

3) Det har skett betydande förbättringar i Map/Reduce i MongoDB version 2.4. SpiderMonkey JavaScript-motorn har ersatts av V8 JavaScript-motorn och det finns inte längre något globalt JavaScript-lås, vilket innebär att flera Map/Reduce-trådar kan köras samtidigt.

Map/Reduce-motorn är fortfarande betydligt långsammare än aggregeringsramverket, av två huvudsakliga skäl:

  • JavaScript-motorn tolkas, medan Aggregation Framework kör kompilerad C++-kod

  • JavaScript-motorn kräver fortfarande att varje dokument som granskas konverteras från BSON till JSON; om du sparar utdata i en samling måste resultatuppsättningen sedan konverteras från JSON tillbaka till BSON

Det finns inga betydande förändringar i Map/Reduce mellan 2.4 och 2.6.

Jag rekommenderar fortfarande inte att du använder Map/Reduce för realtidsaggregation i MongoDB version 2.4 eller 2.6.

4) Om du verkligen behöver Map/Reduce kan du också titta på Hadoop Adaptor. Det finns mer information här:

  • 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. Returnera begränsat antal poster av en viss typ, men obegränsat antal andra poster?

  2. Det gick inte att starta redis.service:Enheten redis-server.service är maskerad

  3. MongoDB $sinh

  4. Finns det något sätt att skriva pyspark dataframe till azure cache för redis?