Wann sollte die Map Reduce over Aggregation Pipeline in MongoDB verwendet werden?

8

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.

  • Was sind die Anwendungsfälle für die Verwendung der Map-Reduce-over-Aggregation-Pipeline?
  • Welche Flexibilität bietet map-reduce?
  • Wie viel Delta gibt es in der Leistung?
dev ツ 22.05.2015, 08:19
quelle

1 Antwort

12

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

  • Behalte die Ergebnisse von M / R in einer separaten Sammlung und aktualisiere sie von Zeit zu Zeit (unter Verwendung des Parameters out und Zusammenführung der Ergebnisse)
  • Komplexe Abfragen in großen, gruppierten Datensätzen
  • Abfragen, die so komplex sind, dass Sie das Aggregationsframework nicht verwenden können. Ich würde sagen, das ist ein ziemlich sicheres Anzeichen für einen Designfehler in der Datenstruktur, aber im Prinzip kann es helfen
mnemosyn 22.05.2015, 09:58
quelle