Database Reference
In-Depth Information
capacity _ by _ style[room.style] = total _ count.to _ i + room.capacity
end
Room.all führt eine Query über die Datenbank aus, die der folgenden SQL-
Query entspricht:
SELECT * FROM rooms;
Die Datenbank sendet alle Ergebnisse an den Applikations-Server und der
führt irgendeine Operation mit den Daten durch. In diesem Fall gehen wir
alle Zimmer des Hotels durch und zählen die Gesamtkapazität für jeden Zim-
mertyp (z. B. reicht die Kapazität der Suiten des Hotels für 448 Gäste). Das
ist bei kleinen Datenmengen akzeptabel, doch wenn die Anzahl der Zimmer
steigt, wird das System langsamer, da das System die Zimmer-Daten an die
Applikation weitergeben muss.
Mapreduce verfolgt die genau entgegengesetzte Strategie. Statt die Daten aus
der Datenbank abzurufen und auf dem Client (oder dem Applikations-Server)
zu verarbeiten, übergibt Mapreduce einen Algorithmus an alle Datenbank-
Knoten. Die sind dann dafür verantwortlich, ein Ergebnis zurückzuliefern.
Jedes Objekt auf dem Server wird auf irgendeinen gemeinsamen Schlüssel ab-
gebildet (“map”), der die Daten gruppiert und alle passenden Schlüssel werden
dann auf einen einzelnen Wert reduziert (“reduce”).
Für Riak bedeutet das, dass die Datenbankserver für das Map/Reduce der
Werte auf jedem Knoten verantwortlich sind. Die reduzierten Werte werden
an einen anderen Server weitergereicht (üblicherweise an den anfordernden
Server), der die Werte weiter reduziert und das Endergebnis an den anfor-
dernden Client (oder auch an einen Rails-Applikationsserver) zurückgibt.
Diese einfache Umkehrung ist eine leistungsfähige Möglichkeit, komplexe Al-
gorithmen lokal auf jedem Server auszuführen und ein sehr kleines Ergebnis
an den aufrufenden Client zurückzugeben. Es ist schneller, den Algorithmus
an die Daten zu senden, als die Daten an den Algorithmus zu schicken. In
Abbildung 7, Ergebnisse der map-Funktion , auf Seite 73 sehen wir, wie ein
Bucket mit Telefonrechnungen, bei denen die Telefonnummer den Schlüs-
sel bildet, die Berechnung der Gesamtkosten auf drei Server verteilt. Jeder
Server verarbeitet dabei alle Nummern mit dem gleichen Präfix.
Die Ergebnisse der map-Funktion wird an die Reduce-Funktionen überge-
ben. Ein Kombination aus den Map-Ergebnissen und vorangegangenen Re-
duce-Aufrufenkannwiederumannachfolgende Reduce-Funktionen über-
geben werden. Wir kommen auf diesen Punkt später noch einmal zurück,
Search WWH ::




Custom Search