Implementacion de Riak

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

Mensajes hacia Riak

En principio, Riak se basa en REST, esto quiere decir que cada URI especifica un recurso
dentro de la base de datos, y sobre ese recurso podemos realizar las acciones HTTP que se
relacionan a cualquiera de las acciones básicas de una petición:

 GET equivale a tomar datos, sería la R del CRUD (retrieve) o el SELECT del SQL.
 PUT equivale a insertar datos nuevos, sería la C del CRUD (create) o el INSERT del
SQL.
 POST equivale a una modificación o actualización de datos, sería la U del CRUD
(update) o el UPDATE de SQL.
 DELETE equivale a una eliminación del dato, sería la D (delete) o el DELETE de SQL.

Esto permite muchas ventajas, como el uso, en el GET, de la cabecera If-Modified-Since, que nos
dará la posibilidad de comprobar si un elemento pesado (imagen, vídeo o similar) es nuevo o no,
para volver a descargarlo. Riak nos retornará el objeto con el mensaje 200 para indicar que hay uno
nuevo, o solo la cabecera 304 (Not Modified) para indicarnos de que es el mismo que ya tenemos,
por lo que no hace falta volver a transmitirlo.

Composición de la URI

URI para localizar recursos dentro de Riak se puede establecer como sigue:

/riak/BUCKET/RESOURCE

Estos recursos son un espacio en el que podemos guardar la información que necesitemos.
Puede ser un texto normal, codificado como YAML, como JSON, como XML, o incluso
una imagen o un vídeo... o incluso una imagen ISO (comprobado con una ISO de Sabayon
de 700 MB aproximadamente).

Por lo que, podemos probar a hacer algunas prácticas. Lanzamos Riak. Si lo tenemos en
ejecución en el puerto 8098 (es el de por defecto cuando se instala el paquete deb),
podemos hacer lo siguiente:

curl -v -X PUT -H "Content-type: image/jpeg" --data-binary @imagen.jpg


http://127.0.0.1:8098/riak/pruebas/imagen.jpg

La comprobación más simple es a través del cualquier navegador que tengas instalado en
esa misma máquina:
http://127.0.0.1:8098/riak/pruebas/imagen.jpg

Con esto ya tendríamos la primera pureba satisfactoria de nuestro sistema de clave-valor


para el almacenamiento de datos. Ahora, si lo que queremos es eliminarla, podemos hacerlo
así:

curl -v -X DELETE http://127.0.0.1:8098/riak/pruebas/imagen.jpg

Voy a basarme en lo explicado en la documentación oficial de Riak, para no tener que


inventar datos. En principio, si descargamos los dos siguientes ficheros y los ejecutamos:

 goog.csv, datos a insertar en Riak (en formato CSV).


 load_data, script en Erlang que insertará los datos, convirtiéndolos en un formato JSON. Hay
que editar el scirpt y cambiar la URL para que tenga el puerto correcto, en mi caso puse 8098.

Esto nos da un bucket bastante grande en el que poder practicar.

Como decíamos antes, vamos a dar un repaso al sistema de MapReduce, el cual fue
popularizado por Google. Este se basa en el algoritmo de divide y vencerás, realmente, ya
que realiza un lanzamiento sobre cada elemento individual (map) tomando un resultado y,
después, la parte de reduce, se encarga de analizar y unificarlo todo en un solo resultado.

Por lo tanto, tenemos que enviar mediante POST, a una URI concreta, un formato JSON de
dato que será el siguiente:

{"inputs": "goog", "query": [

{"map": {

"language":"javascript",

"source": "function(value, keyData, arg) { var data =


Riak.mapValuesJson(value)[0]; if(data.High && parseFloat(data.High) > 600.00)
return [value.key]; else return []; }",

"keep": true

}}

]}

Si guardamos esto en un fichero, podemos lanzarlo con el siguiente comando:


curl -X POST http://127.0.0.1:8098/mapred -H "Content-type: application/json" -d
@mapred.json

En este caso, la función de map es la siguiente:

function(value, keyData, arg) {

var data = Riak.mapValuesJson(value)[];

if(data.High && data.High > 600.00)

return [value.key];

else

return [];

Conclusión

Como puede verse, Riak solventa con su paradigma de NoSQL, basado en el


almacenamiento por clave-valor y búsquedas por MapReduce, la mayoría de necesidades
que se pueden encontrar a la hora de emplear este tipo de sistemas. Lo único que queda un
poco en el aire, o hay que realizar con llamadas sucesivas, son las actualizaciones y
eliminaciones masivas, pero realmente, puede ser un mal menor, si estas no son empleadas
en el esquema que se vaya a implementar Riak.

Hay que tener presente que Riak es una muy buena base de datos, que fundamenta sus
potencias en la posibilidad de contar con un cluster, lecturas rápidas con caché, y búsquedas
artificiosas con MapReduce, pero puede haber otros usos en los que las consultas de
modificación y eliminación masivas sean lo más importante y esto ya sería mejor abarcarlo
con otra base de datos de otro tipo.

También podría gustarte