Database Reference
In-Depth Information
Der cURL-Befehl @- legt fest, dass der Standard-Eingang der Console offen
bleibt, bis ein
Ctrl
+
D
empfangen wird. Diese Daten werden im HTTP-Body an
die URL gesendet, den wir an den
/mapred
-Befehl senden (Vorsicht: Die URL
lautet
/mapred
,nicht
/riak/mapred
).
$
curl -X POST -H "content-type:application/json"
\
http://localhost:8091/mapred --data @-
{
"inputs":[
["rooms","101"],["rooms","102"],["rooms","103"]
],
"query":[
{"map":{
"language":"javascript",
"source":
"function(v) {
/
*
Aus dem Riak-Objekt Daten extrahieren und als JSON parsen
*
/
var parsed
_
data = JSON.parse(v.values[0].data);
var data = {};
/
*
Kapazität mit Raumtyp verknüpfen
*
/
data[parsed
_
data.style]
= parsed
_
data.capacity;
return [data];
}"
}}
]
}
Ctrl
-
D
Der
/mapred
-Befehl verlangt gültiges JSON und hier haben wir die Form un-
serer Mapreduce-Befehle festgelegt. Wir wählen die drei gewünschten Räu-
me, indem wir die „Eingangswerte“ als Array mit
[bucket, key]
-Paaren an-
geben. Das Wesentliche bei diesen Einstellungen findet sich aber unter dem
query
-Wert, der ein Array von JSON-Objekten akzeptiert, das Objekte ent-
hält, bei denen
map
,
reduce
und/oder
links
die Schlüssel bilden (mehr über
Links erfahren Sie später).
Damit werden die Daten abgerufen (
v.values[0].data
), die Werte als JSON-
Objekt geparst (
JSON.parse(...)
) und die Kapazität (
parsed
_
data.capacity
)
zusammen mit dem Zimmertyp (
parsed
_
data.style
) zurückgegeben. Das Er-
gebnis sieht dann etwa so aus:
[{"suite":6},{"single":1},{"double":1}]
Das sind einfach die JSON-Daten der Objekte für die Zimmer 101, 102, und
103.
Wir müssen die Daten nicht im JSON-Format ausgeben. Wir können den
Wert jedes Schlüssels in das umwandeln, was wir brauchen. Wir haben nur
auf die Body-Daten zugegriffen, aber wir hätten auch Metadaten, Link-Infor-
mationen, den Schlüssel oder die Daten selbst abrufen können. Letztlich ist