cloud computing: las nuevas capas de persistencia
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
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"]
Jugando con CouchDB
Via http://host/_utils/
Crear Base de Datos
Crear documentos
Crear Vistas
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 [email protected]
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/