Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare una empresa de Scribd logo
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

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/