SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
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 Javascript
    o   Funciones javascript que “emiten” resultados
     function(doc)
     {
         emit(“key”, doc);
     }


•   Se devuelven pares clave/valor donde
    los valores son documentos.
    o   Se usa para implementar consultas
        complejas.
Características de CouchDB
   Motor de vistas mediante Javascript
    o   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 REST
    o   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   [quot;testingquot;,quot;blogquot;]
Jugando con CouchDB
   Via http://host/_utils/
   Crear Base de Datos
   Crear documentos
   Crear Vistas
Jugando con CouchDB
   Accediendo a los datos:
    o
        http://host/_all_dbs   : lista de Bds
    o
        http://host/blog_[nombre, apodo, nick...] :
        Información de la BD
    o
        http://host/blog_[nombre, apodo, nick...]/_all_docs :
        Lista de documentos
    o
        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
   Vía programación
    o   Lenguaje de programación capaz de realizar
        peticiones HTTP
    o   Por ejemplo: PHP 5 + cURL
Jugando con CouchDB
   Vía programación
    o   Obtener datos
    $ch = curl_init(quot;http://host/_all_dbsquot;);

    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ón
    o   Obtener datos de una vista
    $ch =
    curl_init(quot;http://host/_view/group_by_author/authors?
    group=truequot;);

    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ón
    o   Grabar datos
    $ch = curl_init(quot;http://host/blog/quot;);


    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);

    curl_setopt($ch, CURLOPT_POSTFIELDS, '{quot;tituloquot;:quot;prueba
    quot;, quot;autorquot;:quot;brenesquot;}');

    $json = curl_exec($ch);
    curl_close($ch);

    $dbs = json_decode($json);
Jugando con CouchDB
   Vía programación
    o   Grabar datos
    $ch = curl_init(quot;http://host/blog/quot;);


    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”,
    quot;tituloquot;:quot;prueba quot;, quot;autorquot;:quot;brenesquot;}');

    $json = curl_exec($ch);
    curl_close($ch);

    $dbs = json_decode($json);
Jugando con CouchDB
   Vía programación
    o   Actualizar datos
    $ch = curl_init(quot;http://host/blog/quot;);

    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”, quot;tituloquot;:quot;prueba quot;,
    quot;autorquot;:quot;brenesquot;}');

    $json = curl_exec($ch);
    curl_close($ch);

    $dbs = json_decode($json);
Jugando con CouchDB
   Vía programación
    o   Eliminar datos
    $ch = curl_init(quot;http://host/blog/post_idquot;);


    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 Documentos
     o   Base de Datos => Dominio
     o   Documento => Item
     o   Valores => Atributos
Características de Amazon
SimpleDB
    API basada en servicios SOAP o REST
     o   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
    Escalabilidad
     o   Posibilidad de crear varios dominios.
     o   En manos de Amazon
          •   Sin costes
          •   Sin control
Jugando con Amazon SimpleDB
   Interfaz de acceso
    o   Via extensión de Firefox
             o   http://code.google.com/p/sdbtool/
Jugando con Amazon SimpleDB
   Vía programación
    o   Bibliotecas de desarrollo disponibles para
        muchos lenguajes.
    o   Consumo directo de SOAP.
    o   En nuestro caso: C# .NET
o   http://developer.amazonwebservices.com/connect/entry.jspa?exte
Jugando con Amazon SimpleDB
   Vía programación
    o   Listar Dominios


 ListDomainsRequest request = new ListDomainsRequest();

 ListDomainsResponse response =
 this.cliente.ListDomains(request);

 response.ListDomainsResult.DomainName;
Jugando con Amazon SimpleDB
   Vía programación
    o   Crear Dominios
    CreateDomainRequest request = new
    CreateDomainRequest();
    request.DomainName = quot;Nombrequot;;

    CreateDomainResponse response =
    this.cliente.ListDomains(request);

    response.ListDomainsResult.DomainName;
Jugando con Amazon SimpleDB
   Vía programación
    o   Obtener Items
    QueryRequest request = new QueryRequest();

    request.DomainName =
    this.cbDomains.SelectedItem.ToString();

    QueryResponse response = this.cliente.Query(request);
Jugando con Amazon SimpleDB
   Vía programación
    o   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
     Documentos
     o   ¿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
Conclusiones
 Estas 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/

Más contenido relacionado

Similar a Cloud Computing: las nuevas Capas de Persistencia

José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
RootedCON
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Loja Valle de Tecnología
 
Base de Datos por Gustavo V.M
Base de Datos por Gustavo V.MBase de Datos por Gustavo V.M
Base de Datos por Gustavo V.M
Gustavo
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005
oswchavez
 

Similar a Cloud Computing: las nuevas Capas de Persistencia (20)

José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Cloud Computing: Algoritmos en la Nube
Cloud Computing: Algoritmos en la NubeCloud Computing: Algoritmos en la Nube
Cloud Computing: Algoritmos en la Nube
 
Connectionjava
ConnectionjavaConnectionjava
Connectionjava
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
 
Couch db
Couch dbCouch db
Couch db
 
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - ExasolExtendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
Extendiendo Django: Cómo Escribir Tu Propio Backend de Base de Datos - Exasol
 
Base de Datos por Gustavo V.M
Base de Datos por Gustavo V.MBase de Datos por Gustavo V.M
Base de Datos por Gustavo V.M
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Clase conexion java - Analisis de Sistemas
Clase conexion java - Analisis de SistemasClase conexion java - Analisis de Sistemas
Clase conexion java - Analisis de Sistemas
 
Introducción a polybase en SQL Server
Introducción a polybase en SQL ServerIntroducción a polybase en SQL Server
Introducción a polybase en SQL Server
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005
 
Global Azure Bootcamp - Jorge Muchaypiña G.
Global Azure Bootcamp - Jorge Muchaypiña G.Global Azure Bootcamp - Jorge Muchaypiña G.
Global Azure Bootcamp - Jorge Muchaypiña G.
 
Introducción a hadoop
Introducción a hadoopIntroducción a hadoop
Introducción a hadoop
 
Web2 Quiensomos
Web2 QuiensomosWeb2 Quiensomos
Web2 Quiensomos
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones Android
 
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
24 HOP edición Español - Patrones de escalalidad en microsoft azure sql datab...
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 

Más de David J. Brenes

Más de David J. Brenes (16)

Desarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDesarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formularios
 
Desarrollo rápido con PHP y Symfony (V): Las rutas
Desarrollo rápido con PHP y Symfony (V): Las rutasDesarrollo rápido con PHP y Symfony (V): Las rutas
Desarrollo rápido con PHP y Symfony (V): Las rutas
 
Desarrollo rápido con PHP y Symfony (IV): El Modelo
Desarrollo rápido con PHP y Symfony (IV): El ModeloDesarrollo rápido con PHP y Symfony (IV): El Modelo
Desarrollo rápido con PHP y Symfony (IV): El Modelo
 
Desarrollo rápido con PHP y Symfony (III): La vista
Desarrollo rápido con PHP y Symfony (III): La vistaDesarrollo rápido con PHP y Symfony (III): La vista
Desarrollo rápido con PHP y Symfony (III): La vista
 
Desarrollo rápido con PHP y Symfony (II): El controlador
Desarrollo rápido con PHP y Symfony (II): El controladorDesarrollo rápido con PHP y Symfony (II): El controlador
Desarrollo rápido con PHP y Symfony (II): El controlador
 
Desarrollo rápido con PHP y Symfony (I): Introducción a Symfony
Desarrollo rápido con PHP y Symfony (I): Introducción a SymfonyDesarrollo rápido con PHP y Symfony (I): Introducción a Symfony
Desarrollo rápido con PHP y Symfony (I): Introducción a Symfony
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Introducción a la Yahoo! Open Strategy
Introducción a la Yahoo! Open StrategyIntroducción a la Yahoo! Open Strategy
Introducción a la Yahoo! Open Strategy
 
Yahoo! Query Language
Yahoo! Query LanguageYahoo! Query Language
Yahoo! Query Language
 
Introduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web Rest
 
Servicio y Consumo de Servicios REST en PHP
Servicio y Consumo de Servicios REST en PHPServicio y Consumo de Servicios REST en PHP
Servicio y Consumo de Servicios REST en PHP
 
Cloud Computing: Recursos de la Web 2.0
Cloud Computing: Recursos de la Web 2.0Cloud Computing: Recursos de la Web 2.0
Cloud Computing: Recursos de la Web 2.0
 
Automatic detection of navigational queries according to Behavioural Characte...
Automatic detection of navigational queries according to Behavioural Characte...Automatic detection of navigational queries according to Behavioural Characte...
Automatic detection of navigational queries according to Behavioural Characte...
 
Programación de Yahoo! Pipes
Programación de Yahoo! PipesProgramación de Yahoo! Pipes
Programación de Yahoo! Pipes
 
Yahoo! Pipes y la Web 2.0
Yahoo! Pipes y la Web 2.0Yahoo! Pipes y la Web 2.0
Yahoo! Pipes y la Web 2.0
 
Presentación Lectura TFMI
Presentación Lectura TFMIPresentación Lectura TFMI
Presentación Lectura TFMI
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Cloud Computing: las nuevas Capas de Persistencia

  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 9. 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…)
  • 10. Características de CouchDB  Motor de vistas mediante Javascript o Funciones javascript que “emiten” resultados function(doc) { emit(“key”, doc); } • Se devuelven pares clave/valor donde los valores son documentos. o Se usa para implementar consultas complejas.
  • 11. Características de CouchDB  Motor de vistas mediante Javascript o Funciones “reduce” • Se usan para generar resultados agregados function (key, values, rereduce) { return sum(values); }
  • 12. 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?
  • 13. Características de CouchDB  Basada en Servicios Web REST o 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 [quot;testingquot;,quot;blogquot;]
  • 14. Jugando con CouchDB  Via http://host/_utils/  Crear Base de Datos  Crear documentos  Crear Vistas
  • 15. Jugando con CouchDB  Accediendo a los datos: o http://host/_all_dbs : lista de Bds o http://host/blog_[nombre, apodo, nick...] : Información de la BD o http://host/blog_[nombre, apodo, nick...]/_all_docs : Lista de documentos o http://host/blog_[nombre, apodo, nick...]/[doc_id] : Información del documento
  • 16. Jugando con CouchDB  Creando Vistas: o Creamos una vista temporal o Podemos realizar pruebas o La almacenamos con un nombre
  • 17. Jugando con CouchDB  Vía programación o Lenguaje de programación capaz de realizar peticiones HTTP o Por ejemplo: PHP 5 + cURL
  • 18. Jugando con CouchDB  Vía programación o Obtener datos $ch = curl_init(quot;http://host/_all_dbsquot;); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $json = curl_exec($ch); curl_close($ch); $dbs = json_decode($json);
  • 19. Jugando con CouchDB  Vía programación o Obtener datos de una vista $ch = curl_init(quot;http://host/_view/group_by_author/authors? group=truequot;); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $json = curl_exec($ch); curl_close($ch); $dbs = json_decode($json);
  • 20. Jugando con CouchDB  Vía programación o Grabar datos $ch = curl_init(quot;http://host/blog/quot;); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”); curl_setopt($ch, CURLOPT_POSTFIELDS, '{quot;tituloquot;:quot;prueba quot;, quot;autorquot;:quot;brenesquot;}'); $json = curl_exec($ch); curl_close($ch); $dbs = json_decode($json);
  • 21. Jugando con CouchDB  Vía programación o Grabar datos $ch = curl_init(quot;http://host/blog/quot;); 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”, quot;tituloquot;:quot;prueba quot;, quot;autorquot;:quot;brenesquot;}'); $json = curl_exec($ch); curl_close($ch); $dbs = json_decode($json);
  • 22. Jugando con CouchDB  Vía programación o Actualizar datos $ch = curl_init(quot;http://host/blog/quot;); 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”, quot;tituloquot;:quot;prueba quot;, quot;autorquot;:quot;brenesquot;}'); $json = curl_exec($ch); curl_close($ch); $dbs = json_decode($json);
  • 23. Jugando con CouchDB  Vía programación o Eliminar datos $ch = curl_init(quot;http://host/blog/post_idquot;); 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);
  • 25. Características de Amazon SimpleDB  Base de Datos Orientada a Documentos o Base de Datos => Dominio o Documento => Item o Valores => Atributos
  • 26. Características de Amazon SimpleDB  API basada en servicios SOAP o REST o Definición de servicios mediante WSDL o Autenticación: • Identificador de acceso + hash con una clave secreta • Certificado x.509 o Bibliotecas de desarrollo
  • 27. Características de Amazon SimpleDB  Escalabilidad o Posibilidad de crear varios dominios. o En manos de Amazon • Sin costes • Sin control
  • 28. Jugando con Amazon SimpleDB  Interfaz de acceso o Via extensión de Firefox o http://code.google.com/p/sdbtool/
  • 29. Jugando con Amazon SimpleDB  Vía programación o Bibliotecas de desarrollo disponibles para muchos lenguajes. o Consumo directo de SOAP. o En nuestro caso: C# .NET o http://developer.amazonwebservices.com/connect/entry.jspa?exte
  • 30. Jugando con Amazon SimpleDB  Vía programación o Listar Dominios ListDomainsRequest request = new ListDomainsRequest(); ListDomainsResponse response = this.cliente.ListDomains(request); response.ListDomainsResult.DomainName;
  • 31. Jugando con Amazon SimpleDB  Vía programación o Crear Dominios CreateDomainRequest request = new CreateDomainRequest(); request.DomainName = quot;Nombrequot;; CreateDomainResponse response = this.cliente.ListDomains(request); response.ListDomainsResult.DomainName;
  • 32. Jugando con Amazon SimpleDB  Vía programación o Obtener Items QueryRequest request = new QueryRequest(); request.DomainName = this.cbDomains.SelectedItem.ToString(); QueryResponse response = this.cliente.Query(request);
  • 33. Jugando con Amazon SimpleDB  Vía programación o 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);
  • 35. Conclusiones  Sobre las BBDD Orientadas a Documentos o ¿Merecen la pena? o ¿Sustitutas de BBDD Relacionales? o ¿Las usaríais en proyectos? o Problemas de CouchDB o Problemas de Amazon SimpleDB
  • 36. Conclusiones Dudas a docencia@davidjbrenes.info
  • 37. Conclusiones Estas 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/