MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Map-Reduce-Leistung in MongoDb 2.2, 2.4 und 2.6

Hier ist der aktuelle Stand der Funktionalität für Map/Reduce in MongoDB

1) Die meisten Leistungseinschränkungen für Map/Reduce bleiben in MongoDB Version 2.2 bestehen. Die Map/Reduce-Engine erfordert weiterhin, dass jeder Datensatz von BSON in JSON konvertiert wird, die eigentlichen Berechnungen werden mithilfe der eingebetteten JavaScript-Engine durchgeführt (die langsam ist), und es gibt immer noch eine einzige globale JavaScript-Sperre, die nur einen einzigen JavaScript-Thread zulässt gleichzeitig auszuführen.

Es wurden einige inkrementelle Verbesserungen an Map/Reduce für Sharding-Cluster vorgenommen. Am bemerkenswertesten ist, dass der letzte Reduce-Vorgang jetzt auf mehrere Shards verteilt wird und die Ausgabe ebenfalls parallel fragmentiert wird.

Ich würde Map/Reduce nicht für Echtzeitaggregation in MongoDB Version 2.2 empfehlen

2) Beginnend mit MongoDB 2.2 gibt es jetzt ein neues Aggregation Framework. Dies ist eine neue Implementierung von Aggregationsoperationen, geschrieben in C++ und eng in das MongoDB-Framework integriert.

Die meisten Map/Reduce-Jobs können neu geschrieben werden, um das Aggregation Framework zu verwenden. Sie werden normalerweise schneller ausgeführt (20-fache Geschwindigkeitsverbesserung gegenüber Map/Reduce ist in Version 2.2 üblich), sie nutzen die vorhandene Abfrage-Engine vollständig aus und Sie können mehrere Aggregationsbefehle parallel ausführen.

Wenn Sie Echtzeit-Aggregationsanforderungen haben, beginnen Sie zunächst mit dem Aggregation Framework. Weitere Informationen zum Aggregationsframework finden Sie unter diesen Links:

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

3) In der MongoDB-Version 2.4 wurden erhebliche Verbesserungen bei Map/Reduce vorgenommen. Die SpiderMonkey-JavaScript-Engine wurde durch die V8-JavaScript-Engine ersetzt, und es gibt keine globale JavaScript-Sperre mehr, was bedeutet, dass mehrere Map/Reduce-Threads gleichzeitig ausgeführt werden können.

Die Map/Reduce-Engine ist immer noch erheblich langsamer als das Aggregations-Framework, und zwar aus zwei Hauptgründen:

  • Die JavaScript-Engine wird interpretiert, während das Aggregation Framework kompilierten C++-Code ausführt

  • Die JavaScript-Engine erfordert weiterhin, dass jedes untersuchte Dokument von BSON in JSON konvertiert wird; Wenn Sie die Ausgabe in einer Sammlung speichern, muss die Ergebnismenge anschließend von JSON zurück in BSON konvertiert werden

Es gibt keine wesentlichen Änderungen in Map/Reduce zwischen 2.4 und 2.6.

Ich empfehle immer noch nicht, Map/Reduce für Echtzeit-Aggregation in MongoDB Version 2.4 oder 2.6 zu verwenden.

4) Wenn Sie Map/Reduce wirklich brauchen, können Sie sich auch den Hadoop-Adapter ansehen. Weitere Informationen finden Sie hier:

  • 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