Database Reference
In-Depth Information
Als Nächstes würden wir den Code direkt auf dem Server ausführen. Die
eval -Funktion übergibt den String an den Server, evaluiert ihn als Java-
Script-Code und gibt das Ergebnis zurück.
> db.eval( 'getLast(db.phones)' )
Das sollte das gleiche Ergebnis zurückliefern wie der lokale Aufruf von get-
Last(collection) .
> db.system.js.findOne({ ' _ id' : 'getLast' }).value(db.phones)
Beachten Sie aber, dass eval() den Mongo-Daemon mongod während der Aus-
führung blockiert, d. h., es eignet sich hauptsächlich für einmalige Dinge
oder für Tests, nicht aber für Prozeduren im Produktiveinsatz. Sie können
diese Funktion auch innerhalb von $where und bei Mapreduce verwenden.
Nun haben wir alle Dinge beisammen, um Mapreduce unter MongoDB zu
nutzen.
Mapreduce (und Finalize)
Das Mapreduce-Muster von Mongo ähnelt Riak, es gibt aber einige kleine Un-
terschiede. Statt die map -Funktion einen umgewandelten Wert zurückliefern
zu lassen, verlangt Mongo zum Mappen den Aufruf einer emit -Funktion mit
einem Schlüssel. Der Vorteil besteht darin, dass Sie für ein Dokument mehr
als einmal „emittieren“ können. Die reduce -Funktion verlangt einen einzel-
nen Schlüssel und eine Liste von Werten, die für diesen Schlüssel emittiert
wurden. Mongo kennt schließlich noch einen optionalen dritten Schritt na-
mens finalize , der für jeden abgebildeten Wert nur einmal ausgeführt wird,
nachdem alle Reducer gelaufen sind. Auf diese Weise können Sie abschlie-
ßende Berechnungen oder Aufräumarbeiten durchführen, falls das notwen-
dig sein sollte.
Da wir die Grundlagen von Mapreduce bereits kennen, sparen wir uns ein
einleitendes Beispiel und steigen gleich richtig ein. Wir wollen einen Bericht
erstellen, der alle Telefonnummern zählt, die (nach Land) die gleichen Zif-
fern enthalten. Zuerst speichern wir eine Hilfsfunktion, die ein Array al-
ler unterschiedlichen Nummern erzeugt. (Wie die Hilfsfunktion funktioniert,
ist für das Verständnis der Mapreduce-Gesamtoperation nicht von
Bedeutung.)
Search WWH ::




Custom Search