/ / MongoDB - Aggregat zu einer anderen Sammlung? - Mongodb, Mapreduce, Aggregations-Framework

MongoDB - Aggregieren zu einer anderen Sammlung? - mongodb, mapreduce, Aggregations-Framework

Ich habe einen Prozess, den ich derzeit Mongos verwendeMap / Reduce Framework für, aber es funktioniert nicht sehr gut. Es ist eine ziemlich einfache Aggregation, bei der ich über 3 Felder bucketize, die Summe von 4 verschiedenen Feldern zurückgebe und die Werte für 4 weitere Felder durchlasse (die konstant sind) in jedem Eimer).

Aus in [ Map-Reduce-Leistung in MongoDb 2.2, 2.4 und 2.6 ], Ich möchte dies für eine bessere Leistung in das Aggregations-Framework umwandeln, aber es stehen drei Dinge im Weg, denke ich:

  1. Das Gesamtergebnis kann groß sein und die Grenze von 16 MB von Mongo überschreiten, auch wenn ein Dokument im Ergebnis sehr klein ist.
  2. Ich kann direkt auf eine andere Sammlung abbilden / verkleinern, aber das Aggregationsframework kann nur Ergebnisse inline zurückgeben (denke ich?).
  3. Für inkrementelle Aktualisierungen, wenn mehr Daten in der Quellensammlung ankommen, kann ich sie zuordnen / reduzieren MapReduceCommand.OutputType (in Java) setzen Sie auf REDUCE, genau passend zu meinem Anwendungsfall, aber ich sehe keine entsprechende Funktionalität im Aggregationsframework.

Gibt es gute Möglichkeiten, diese Probleme im Aggregationsrahmen zu lösen? Der Server ist derzeit Version 2.4.3 - wir können bei Bedarf neue Funktionen aktualisieren.

Antworten:

1 für die Antwort № 1

Das Aggregationsframework kann derzeit nicht direkt an eine andere Sammlung ausgegeben werden. Sie können jedoch die Antwort in dieser Diskussion versuchen: SO-Fragen-Ausgabe-Aggregat für neue Sammlung Die Mapreduce ist viel langsamer und ich war es auch schonWarten auf eine Lösung. Sie können den Hadoop-zu-Mongodb-Anschluss ausprobieren, der auf der Mongodb-Website unterstützt wird. Hadoop ist schneller in Mapreduce. Ich weiß jedoch nicht, ob es in Ihrem speziellen Fall gut geeignet wäre.

Link zu hadoop + MongoDB-Connector

Alles Gute.


3 für die Antwort № 2

Das kannst du jetzt mit machen raus wie im mongo erklärt

$ out Nimmt die vom zurückgegebenen Dokumente zurückAggregationspipeline und schreibt sie in eine angegebene Sammlung. Mit dem Operator $ out kann das Aggregationsframework Ergebnismengen beliebiger Größe zurückgeben. Der $ out-Operator muss die letzte Stufe der Pipeline sein.

Der Befehl hat die folgende Syntax, wobei 'collection' die Ausgabe der Aggregationsoperation enthält. $ out ist nur am Ende der Pipeline zulässig:

db.<collection>.aggregate( [
{ <operation> },
{ <operation> },
...,
{ $out : "<output-collection>" }
] )