Cloud Computing: las nuevas Capas de Persistencia

Post on 20-Jan-2015

3.041 views 4 download

description

Uno de los primeros problemas con que debemos lidiar en la Web 2.0 es la recuperación de datos para el usuario. ¿Qué nuevas capas de persistencia han sido desarrolladas para hacer frente al reto? En las transparencias se hace una muy leve introducción a Apache CouchDB y Amazon SimpleDB. Estas transparencias están basadas en unas confeccionadas por mi para un curso sobre Cloud Computing.

Transcript of Cloud Computing: las nuevas Capas de Persistencia

Cloud Computing:

Nuevas capas de persistencia

El problema

El problema Escenario

o La Web 2.0 es todo datos• Perfiles de usuario• Mensajería• Datos de terceros (grupos musicales, libros…)• Datos emegentes (gustos)• La Web 2.0 se basa en un gran número de datos

– > 20 tweets cada 2 segundos– > 600 tweets / minuto– > 36000 tweets / hora– > 864000 tweets / dia

BBDD Orientadas a Documentos Bases de Datos Relacionales

o MySQL, PostgreSQL, SQL Server, Oracle…

o Propósito más general => No dedicados a la escalabilidad

o Estructuras de datos (esquemas) más estrictas

• Más seguridad.• Más posibilidades.• Más sobrecarga.

o Funcionalidad distribuida como anexo.

Necesidad de otro tipo de capa de persistencia

BBDD Orientadas a Documentos BBDD Orientadas a Documentos

Basado en la metáfora de la hoja de cálculo de Amazon

o Base de datos => Conjunto de documentos

o Documento => Conjunto de pares clave/valor

BBDD Orientadas a Documentos BBDD Orientadas a Documentos

o Uso intensivo de pares clave valor:• Base de Datos = {identificador, documento}• Documento = {nombre de campo, valor de campo}

o Pueden ser vistas como tablas hash

o Pares clave valor• Muy usados en cloud computing• Un buen ejemplo: El algoritmo Map / Reduce

BBDD Orientadas a Documentos BBDD Orientadas a Documentos

o Optimizadas para datos accedidos mediante clave primaria.

o Sin esquema• Más eficiente.• Menos mantenible.

o Ausencia de relaciones• Facilidad para replicación de datos• Dificultad para expresar modelos complejos

Apache CouchDB

Características de CouchDB Base de Datos Orientada a Documentos

o Revisiones:• Los documentos no se sobreescriben al

modificarse

• Se crean revisiones a-la SVN

• Las revisiones desaparecen (solo sirven para concurrencia)

o Adjuntos• Se pueden adjuntar documentos (jpg, txt, pdf…)

Características de CouchDB

Motor de vistas mediante Javascripto Funciones javascript que “emiten” resultados

• Se devuelven pares clave/valor donde los valores son documentos.o Se usa para implementar consultas

complejas.

function(doc){ emit(“key”, doc);}

Características de CouchDB

Motor de vistas mediante Javascripto Funciones “reduce”

• Se usan para generar resultados agregados

function (key, values, rereduce) {

return sum(values);}

Características de CouchDB

Base de datos “distribuida”o Mecanismos para replicación de datos entre

instancias.o Usado en entornos con miles de instancias.o Diseñado desde el principio para ello.o Basado en HTTP → Escalabilidad propia de

aplicaciones web.

• Pero...o ¿Ejemplos?

Características de CouchDB

Basada en Servicios Web RESTo PUT → CREATE, INSERT

o GET → SELECT

o POST → CREATE, INSERT, UPDATE

o DELETE → DELETE

o COPY, MOVE...

o Comunicación mediante JSON.• http://host/_all_dbs ["testing","blog"]

Accediendo a los datos:o http://host/_all_dbs : lista de Bdso http://host/blog_[nombre, apodo, nick...] :

Información de la BDo http://host/blog_[nombre, apodo, nick...]/_all_docs :

Lista de documentoso http://host/blog_[nombre, apodo, nick...]/[doc_id] :

Información del documento

Jugando con CouchDB

Creando Vistas:o Creamos una vista temporal

o Podemos realizar pruebas

o La almacenamos con un nombre

Jugando con CouchDB

Jugando con CouchDB

Vía programacióno Lenguaje de programación capaz de realizar

peticiones HTTP

o Por ejemplo: PHP 5 + cURL

Jugando con CouchDB

Vía programacióno Obtener datos$ch = curl_init("http://host/_all_dbs");curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$json = curl_exec($ch);curl_close($ch);$dbs = json_decode($json);

Jugando con CouchDB

Vía programacióno Obtener datos de una vista$ch = curl_init("http://host/_view/group_by_author/authors?group=true");curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$json = curl_exec($ch);curl_close($ch);$dbs = json_decode($json);

Jugando con CouchDB

Vía programacióno Grabar datos$ch = curl_init("http://host/blog/");

curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);curl_setopt($ch, CURLOPT_POSTFIELDS, '{"titulo":"prueba ", "autor":"brenes"}');$json = curl_exec($ch);curl_close($ch);$dbs = json_decode($json);

Jugando con CouchDB

Vía programacióno Grabar datos$ch = curl_init("http://host/blog/");

curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “PUT”);curl_setopt($ch, CURLOPT_POSTFIELDS, '{“_id”: “1”, "titulo":"prueba ", "autor":"brenes"}');$json = curl_exec($ch);curl_close($ch);$dbs = json_decode($json);

Jugando con CouchDB

Vía programacióno Actualizar datos$ch = curl_init("http://host/blog/");curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “PUT”);curl_setopt($ch, CURLOPT_POSTFIELDS, '{“id”: “1”, “_rev”: “1236EF”, "titulo":"prueba ", "autor":"brenes"}');$json = curl_exec($ch);curl_close($ch);$dbs = json_decode($json);

Jugando con CouchDB

Vía programacióno Eliminar datos$ch = curl_init("http://host/blog/post_id");

curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “DELETE”);$json = curl_exec($ch);curl_close($ch);$dbs = json_decode($json);

Amazon SimpleDB

Características de Amazon SimpleDB

Base de Datos Orientada a Documentoso Base de Datos => Dominio

o Documento => Item

o Valores => Atributos

Características de Amazon SimpleDB

API basada en servicios SOAP o RESTo Definición de servicios mediante WSDL

o Autenticación:

• Identificador de acceso + hash con una clave secreta

• Certificado x.509

o Bibliotecas de desarrollo

Características de Amazon SimpleDB

Escalabilidado Posibilidad de crear varios dominios.

o En manos de Amazon

• Sin costes

• Sin control

Jugando con Amazon SimpleDB

Interfaz de accesoo Via extensión de Firefox

o http://code.google.com/p/sdbtool/

Jugando con Amazon SimpleDB

Vía programacióno Bibliotecas de desarrollo disponibles para

muchos lenguajes.

o Consumo directo de SOAP.

o En nuestro caso: C# .NETo http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1133

Jugando con Amazon SimpleDB

Vía programacióno Listar Dominios

ListDomainsRequest request = new ListDomainsRequest();ListDomainsResponse response = this.cliente.ListDomains(request);response.ListDomainsResult.DomainName;

Jugando con Amazon SimpleDB

Vía programacióno Crear DominiosCreateDomainRequest request = new CreateDomainRequest();request.DomainName = "Nombre";CreateDomainResponse response = this.cliente.ListDomains(request);response.ListDomainsResult.DomainName;

Jugando con Amazon SimpleDB

Vía programacióno Obtener ItemsQueryRequest request = new QueryRequest();request.DomainName = this.cbDomains.SelectedItem.ToString();QueryResponse response = this.cliente.Query(request);

Jugando con Amazon SimpleDB

Vía programacióno Todos los accesos siguen la misma

estructura[Metodo a ejecutar]Request request = new [Metodo a ejecutar]Request();[Configurar Request]

[Metodo a ejecutar]Response response = this.cliente.[Metodo a ejecutar](request);

Conclusiones

Conclusiones Sobre las BBDD Orientadas a

Documentoso ¿Merecen la pena?

o ¿Sustitutas de BBDD Relacionales?

o ¿Las usaríais en proyectos?

o Problemas de CouchDB

o Problemas de Amazon SimpleDB

Conclusiones

Dudas a docencia@davidjbrenes.info

ConclusionesEstas transparencias se publican bajo licencia Creative Commons y se pueden redistribuir o modificar bajo las siguientes condiciones:

1. Se dé reconocimiento al autor de estas transparencias.

2. No se use con propósitos comerciales.3. Se distribuya con la misma licencia.

Texto de la licencia: http://creativecommons.org/licenses/by-nc-sa/3.0/