If you can't read please download the document
Upload
juan-j-merelo
View
1.362
Download
2
Embed Size (px)
Citation preview
CouchDB y la computacin voluntaria
Juan Julin Merelo GuervsOficina de Software Libre&Grupo GeNeuraUniversidad de Granada@jjmerelo
Imagen de sunlight in a jar en http://www.flickr.com/photos/sunlightinajar/1111631514/in/photostream/
Lecciones de andaluz (oriental)
Para programadores
He pedido traduccin simultnea de mi idioma al vuestro, pero la organizacin no me la ha podido proporcionar. As que para una correcta comprensin de mi charla, me veo obligado a impartirles unas cuantas lecciones de pronunciacin de mi idioma materno: el andaluz oriental.
Git
Github
CouchDB
JavaScript
La academia andaluza oriental de la lengua, reunida en Porcuna, no ha logrado ponerse de acuerdo sobre la correcta pronunciacin de esta palabra. Oscila entre jjjjjjavahcr y avahcr, pasando por javahcr y havahcr
Por qu?
Imagen de la izquierda de http://www.flickr.com/photos/cipherswarm/2414578959/ Christopher Bowns, de la derecha de ario_ http://www.flickr.com/photos/ario/4422273371/in/photostream/ No todo el mundo puede contar con un supercomputador. La computacin voluntaria tiene su origen en el proyecto SETI@Home de anlisis de seales procedentes del espacio buscando regularidades.
Lista de deseos
Bajo umbral de entrada
Escalabilidad masiva
Sistema todo-en-uno
Tolerancia a fallos (salvo fallos bizantinos)
Foto subida por Texas_mustang a Flickr en http://www.flickr.com/photos/astros/3977731447/in/photostream/
Por tanto...
Necesitamos un almacn de objetos
Imagen de Michael Flick en http://www.flickr.com/photos/17773534@N03/3237000861/in/photostream/Object Store en general se define por oposicin a una base de datos tradicional, en la que las columnas son fijas y se estructuran en tablas que tienen relacin unas con otras. Una object store, o key-value store, o base de datos NoSQL, almacena documentos indexados, habitualmente, por una clave.
Deshojando la margarita
Qu tiene de bueno CouchDB?
Fcil de instalar (sudo apt-get install couchdb)Posiblemente ya lo est (desktopcouch):/usr/lib/desktopcouch/desktopcouch-get-porthttp://localhost:/_utils
Ms seguro:file:///home/{username}/.local/share/desktop-couch/couchdb.html
Hosting gratuito: CloudAnt, Iriscouch
En realidad, es una situacin bastante transitoria, porque Ubuntu one no va a funcionar ya sobre l; aunque otras utilidades, desde Evolution hasta Gwibber, hacen uso de l para almacenar cosas.La documentacin dice que debera funcionar esto: dbus-send --session --dest=org.desktopcouch.CouchDB --print-reply --type=method_call / org.desktopcouch.CouchDB.getPort pero no siempre va. Al parecer, en Fedora va as.El interfaz que se muestra se llama Futon, y est escrito en JS/JQuery. Es el interfaz estndar para trabajar con CouchDB.
Y adems
Fcil de usar (interfaz REST)
Versionado de documentos
Actualizaciones en tiempo real mediante _changes
Soporte profesional con CouchBase
No se vayan todava, an hay ms.
Una buena comparacin en esta direccin http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis que incluye adems a otras muchas.Imagen en http://www.flickr.com/photos/thristian/4870449203/ por Thristian.
Volvamos a la computacin (in)voluntaria
BOINC, paradigmtico.
Infraestructura basada en PHP/MySQL
Capaz de manejar 8 millones de peticiones al da
Dato del trabajo de D. B. Anderson, http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1572226 Imagen de http://www.flickr.com/photos/23497193@N07/2870438187/in/photostream/ por frseti
Venga, confiesa, para qu lo quieres?
Ciencia low-cost.
Ciencia ciudadana.
Experimentos con algoritmos evolutivos
Ciencia web: redes sociales + sistemas computacionales
Imagen de StudioTempura en http://www.flickr.com/photos/zero101/4783232763/in/photostream/
Vale, me has convencido. Qu necesitas?
Tareas
UsuariosGrupos
Estadsticas
GUI
Imagen de UnitedBOINC http://www.unitedboinc.com/en/website-info/39-site-info/97-how-boinc-works Imagen del esquema de BOINC http://bof.linuxforum.dk/2005/slides/Carlos/tappingthematrix.html
Podr my CouchDB con esto?
Imagen de Kalexanderson en http://www.flickr.com/photos/kalexanderson/5491910420/in/photostream/
O, dicho de otro modo
Ensanos ya el cdigo, cohone!
Imagen de Tojosan en http://www.flickr.com/photos/tojosan/448977929/in/photostream/
Toma cdigo
bzr branch lp:couchdb-codemotion-ejemplos
https://launchpad.net/couchdb-codemotion-ejemplos
El cdigo tiene licencia GPL, as que podis hacer lo que queris con l.Imagen de Daniel*1977 en http://www.flickr.com/photos/didmyself/2391229347/in/photostream/
Venga, vamos a ello.
Creemos la base de datos
El interfaz se llama futon. Adentrarse en el mundo del couchdb es como meterse en el Ikea: no hay ms que colchones, tresillos, sofases y cosas por el estilo. Queda terminantemente prohibida la produccin de chistes que incluyan la palabra verbenero, desorejado y cosas por el estilo.
Chuck Norris no usara el GUI
curl -X PUT http://127.0.0.1:5984/dameargo
jmerelo@sheldon:~/$ lwp-request -m PUT http://localhost:5984/dameargoPlease enter content (text/plain) to be PUTed:[^D]{"ok":true}
curl -X PUT http://127.0.0.1:5984/dameargo
Referencia: la gua de CouchDB: http://guide.couchdb.org/draft/tour.htmlEl segundo es para nota, claro, en caso de tener instalado LWP, la librera de Perl para interaccionar con HTTP.Muestra de que CouchDB usa un interfaz REST. De que se puede acceder desde el ordenador local (y slo el) por defecto. Y del admin party, todo el mundo es admin. Chungo, pero veamos como lo solucionamos.El tipo de letra, por cierto, es inconsolata.
Voluntaria s, pero no involuntaria
jmerelo@penny:~/txt/docencia/tutoriales$ curl -X PUT http://CvavBlnCni:yBJzPFKYie@localhost:47143/una_nueva{"ok":true}
jmerelo@penny:~/txt/docencia/tutoriales$ curl -X PUT https://jjmerelo:[email protected]/otra_mas{"ok":true}
Se supone que hemos averiguado antes cual es el puerto usando la orden correspondiente o bookmarkeado la direccin (generada cada vez que se conecta uno). El nombre usuario y la clave son tambin aleatorios. Imagen de Sam Newman en http://www.flickr.com/photos/samnewman/201940197/in/photostream/ Con las mismas, se puede usar DELETE para borrarla. Ms fcil, imposible.
Ya est bien de crear bases de datos. O algo de eso.
CouchDB almacena objetos JSON.
Cada objeto tiene un _id
Ms metadatos: _revision
Computacin voluntaria: tareas + usuarios
Comencemos con las tareasObjetos JSON en una base de datosID de tarea
Datos de tarea
jmerelo@penny:~/txt/docencia/tutoriales$ curl -X POST https://jjmerelo:[email protected]/ahora_no -H "Content-Type: application/json" -d '{ "_id":"thefirst" }'{"ok":true,"id":"thefirst","rev":"1-967a00dff5e02add41819138abb3284d"}
Y CouchDB es guay, porque podemos meter cualquier cosa.Una introduccin buena al uso de la lnea de rdenes est en http://www.morethanseven.net/2007/12/11/using-curl-to-play-with-couchdb.html
10110101
10111101
10110101
10111101
10100001
00110101
10101101
00110101
10111101
10101101
10110101
10101101
00110101
10101101
10110101
10101101
10101101=5
10110101=5
10101111=6
Entonces, qu va a ser?
Chuck Norris tambin se cansa de la lnea de rdenes
Y usa, por supuesto, node.js
jmerelo@penny:~$ sudo apt-get install nodejsjmerelo@penny:~$ curl http://npmjs.org/install.sh | sudo shjmerelo@penny:~$ sudo npm install nano
Uso node.js porque est hecho en JS, y se supone que esta charla va de JS. En todo caso, es un intrprete de JS con un modelo muy interesante, y al estar basado en eventos, encaja muy bien.Instrucciones bsicas para usar nano http://writings.nunojob.com/2011/08/nano-minimalistic-couchdb-client-for-nodejs.htmlY para saber ms, http://nodejs.org Ojito! Los mdulos de nodejs se instalan, salvo que se lo digas de otra manera, en el directorio superior al directorio en curso, as que si cambias las cosas de sitio ten cuidadn.
Se acabaron los one-liners
Imagen de Marco de Mojana http://www.flickr.com/photos/mmojana/225310330/in/photostream/ El cdigo adaptado de http://writings.nunojob.com/2011/08/nano-minimalistic-couchdb-client-for-nodejs.html Usamos nano, un mdulo para trabajar con CouchDB en node.js
Las tareas hay que hacerlas
Node.js funciona de forma asncrona. Un poco como Jquery, pero todava no hemos aprendido como hacer esas cosas en el propio CouchDBUna forma fcil de decir que las tareas se han llevado a cabo es usar las versiones: con la versin 2, hecha. Con la versin 1, por hacer. As, de forma natural, podemos seleccionar las tareas que nos quedan por hacer. En este caso usamos node.js para hacerlo.
Poco a poco, va hilando la vieja el copo
Imagen de Boston Public Library http://www.flickr.com/photos/boston_public_library/6031892513/in/photostream/ Trabajar con el interfaz bulk reduce el overhead, porque nos ahorramos la latencia por todos y cada uno de los documentos. En general, habr que tener en cuenta cuanto tardan en llevarse a cabo las tareas para que la latencia (ms que otras cosas) no se coman la ventaja que tenemos distribuyendo el trabajo.
Espera todo eso tiene que hacer el voluntario?
Hay voluntarios muy voluntariosos.
Pero tampoco hay que abusar.
Usemos los adjuntos de CouchDB
Cualquier objeto puede llevar documentos binarios adjuntos.
Cucha, que no s como hacer peticiones
Peticiones en CouchDB === Vistas.
Las vistas son documentos de diseo.
Vistas escritas en JavaScript En cualquier otro lenguaje, tambin.
Dos partes: map y reduceMap: funcin sobre cada documento
Reduce: aplicada a lista de documentos/claves
En un sistema de computacin voluntaria hay que seleccionar, al menos, unos pocos de los que haya disponibles para evaluar. Digamos que la revisin primera es la tarea sin hacer, la segunda la tarea realizada y la tercera comprobada. Seleccionemos a todos los elementos que estn en su segunda versin, para comprobarlos. El interfaz bsico slo permite seleccionar rangos de Ids. Creando Ids a medida, se pueden encontrar formas de particionar la BD, pero es ms elegante (pero menos eficiente) hacer peticiones basadas en el contenido. Imagen titulada Phan Thiet fisherman de Lucas Jans http://www.flickr.com/photos/vsf/2130475253/in/photostream/
Cmodamente, desde nuestro colchn
Creamos una vista temporal para evaluarla.
La funcin map de la izquierda se aplica a todos los elementos de la base de datos y produce la lista que se ve. Desde el mismo interfaz se puede guardar la vista para usarla ms adelante.
An ms comodamente, desde la lnea de rdenes
Usando CouchApp: sudo pip install couchapp
jmerelo@penny:~$ couchapp push https://usuario:[email protected]/ahora_no
CouchApp se puede descargar de Couchapp.org y de otras mltiples formas, esa es slo una de ellas.Con un par de rdenes se crea una aplicacin (que era, posiblemente, lo que tenamos que haber hecho desde el principio) y aadimos una vista. Editamos la vista y la subimos CouchDBBorrar cuidadosamente los reduce si no los vamos a usar, ojo.
Vamos a bajarnos del silln
En la variedad est el gusto:npm install cradle
Cradle es otro de los competidores de nano en el mercado de los mdulos de couchdb para nodejs. Es parecido, en realidad, aunque tiene un nivel un poco ms alto.
Finalmente, llegamos a la computacin voluntaria de veras
Recuperar del servidor al navegador
Hacer cosas en el navegador
Devolver.
Por supuesto, con JQuery!
Imagen de rikkis_refuge en http://www.flickr.com/photos/rikkis_refuge/417852567/in/photostream/Una pena que los nicos voluntarios que hayamos encontrado para nuestro sof sean gatos, pero menos da una piedra. No parecen muy voluntariosos, tampoco.
T de quin eres?
Volvamos a la pesca
Imagen en http://www.flickr.com/photos/shutterhack/3688916759/in/photostream/ por Fadzly @shutterhackVamos a ver cmo se recuperara la informacin en JQuery
Y ahora, a hacer sushi
Imagen de catorze14 en http://www.flickr.com/photos/catorze/5782407641/in/photostream/
Sushi es como le llamamos en Andaluca Oriental al pescato frito. Es decir, se trata de, una vez recuperada la informacin, hacer algo con ella.Aqu le hemos aadido un par de cosas ms: nos bajamos slo los que estn en un estado determinado 1, es decir, sin evaluar, y adems le decimos que incluya con cada resultado el documento correspondiente. Nios, no hagis eso en casa. Eso es slo para que aprendis. Ya sabis, el que sabe, sabe, y el que no aprende.
No te lo quedes todo, quiyo
Hay que devolver a la base de datos lo que se ha calculado; se le aade al objeto el resultado y se vuelve a colocar en la base de datos.
y as sucesivamente
Segunda fase de verifificacin.
Particionado probabilstico para muchos clientes.
Replicacin de ida y vuelta para menor latencia (usar desktopcouch).
Prediccin de prestaciones social
...
Lo ms importante
Ni siquiera tiene que ser voluntaria
Esto es todo
Muchas gracias
Preguntas? + Perfil
Socio de Digital Learning, enseanza virtual: http://dlformacion.com
Lujoyglamour.net, la nica novela que te puedes descargar de CPAN: cpan Net::Lujoyglamour
Oficina de software libre de la UGR: http://osl.ugr.es
Grupo de investigacin GeNeura http://geneura.wordpress.com
Pulse para editar el formato del texto de ttulo