Beim Betrachten der Dokumentation für Map-Reduction habe ich folgendes gefunden:
HINWEIS:
Für die meisten Aggregationsoperationen bietet die Aggregationspipeline bessere Leistung und kohärentere Schnittstelle. Map-Reduce Operationen bieten eine gewisse Flexibilität, die derzeit nicht die Aggregationspipeline.
Ich habe nicht viel davon verstanden.
Zum einen wurde Map / Reduce in MongoDB nicht für Ad-hoc-Abfragen erstellt, und es besteht ein beträchtlicher Aufwand für M / R. Selbst eine sehr einfache M / R-Operation in einem kleinen Datensatz kann aufgrund dieses Overheads Hunderte von Millisekunden benötigen.
Ich kann nicht viel über die Leistung von M / R im Vergleich zum Aggregationsrahmen für große Datensätze in der Praxis sagen, aber in der Theorie sollten M / R-Operationen in einer großen Sharded-Datenbank schneller sein, da die Shards die Operationen ausführen können weitgehend parallel.
Was die Flexibilität betrifft, da M / R tatsächlich Javascript-Methoden ausführt, steht Ihnen die volle Leistungsfähigkeit der Sprache zur Verfügung. Angenommen, Sie möchten einige Daten nach dem Kosinus eines Feldwerts gruppieren. Da es im Aggregation-Framework weder einen $cos
-Operator gibt, noch eine sinnvolle Möglichkeit, diskrete Buckets aus kontinuierlichen Zahlen zu bilden (etwa $truncate
), würde das Aggregations-Framework in diesem Fall nicht helfen.
Also, kurz gesagt, würde ich sagen, die Anwendungsfälle sind
out
und Zusammenführung der Ergebnisse) Tags und Links mapreduce mongodb aggregation-framework