CouchDB y el desarrollo de
     aplicaciones Android
         Ricardo Monagas
Contenido
  1. Big Data
  2. NoSQL
  3. CouchDB
  4. CouchDB & Android
  5. Casos de Éxito
  6. Enlaces de interés
2012


DATA
2.5 Quintillones de Bytes diarios
            Fuente: http://www-01.ibm.com/software/data/bigdata/




Datos por todos lados


        340 Millones de Tweets por día
             4000 tweets por segundo
                                         Fuente: blog.twitter.com
Voldemort

          NoSQL
CouchDB
                 BigTable

          Amazon DynamoDB
CouchDB

Documentos JSON
 Javascript para peticiones MapReduce
       HTTP para formar un API
1. Base de Datos orientada
                 en Documentos
{

    “_id”: “453453406456456”,
    “_rev”: “5345436475658”,
    “moneda”: “Bs”,
    “productos”: *
       {
             “nombre”: “Manzana”,
             “precio”: 20, …
        }, …

    ],
    “fecha”: “2012-08-12T13:15:56.684+0000”,
     “cantidad”: 2,
     “estado”: “cerrado” …
}
2. Peticiones mediante
                   Documentos de Diseño
{ "_id": "_design/Compra",
   "_rev": "371-b2bdc2ce5dd269017f006595328a66ad",
  "language": "javascript",

    "views": {

      “por_fecha_compra": {

           "map": “
            function(doc) {

                  if (doc.fecha && doc.id_usuario && doc.estado === ‘cerrado')

                       emit([doc.id_usuario,doc.fecha], doc);

            }“
      }}
}
¿Por qué NoSQL y CouchDB?

        Los datos de la vida real son
        almacenados en documentos

Almacenamiento de la
  aplicación completa
¿Por qué NoSQL y CouchDB?

Diseño sin esquemas rígidos


          Fácil administración, backup,
          replicación y trabajo offline
CouchDB = Relax
CouchDB & Android
 Instalación


      Couchbase

 Fuente: https://github.com/couchbase/Android-Couchbase
CouchDB & Android
 Instalación

        Ektorp

     Fuente: https://github.com/helun/Ektorp
CouchDB & Android
 Inicialización de CouchDB
  1. Creación de instancia ICouchbaseDelegate
   private final ICouchbaseDelegate mDelegate = new ICouchbaseDelegate() {

        @Override
        public void couchbaseStarted(String host, int port) {}

        @Override
        public void exit(String error) {}

   };
CouchDB & Android
 Inicialización de CouchDB

  2. Declaración de Servicio para Couchbase

   private ServiceConnection couchServiceConnection;
CouchDB & Android
      Inicialización de CouchDB

       3. Método de Inicio de Couchbase

public void startCouchbase() {

    CouchbaseMobile couch = new CouchbaseMobile(getBaseContext(), mCallback);
    couchServiceConnection = couch.startCouchbase();

}
CouchDB & Android
          Inicialización de CouchDB
          3. Llamada al método startCouchbase
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    ...

    startCouchbase();

}
CouchDB & Android
     Inicialización de Ektorp
      1. Creación del Cliente HTTP
public void couchbaseStarted(String host, int port) {


    httpClient = new AndroidHttpClient.Builder()
                 .host(host)
                 .port(port)
                 .username(username)
                 .password(password)
                 .build();

}
CouchDB & Android
    Inicialización de Ektorp
      2. Conexión con el servidor de CouchDB
CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient);

CouchDbConnector db = new StdCouchDbConnector("mydatabase", dbInstance);

db.createDatabaseIfNotExists();
CouchDB & Android
    Manejo de la Base de Datos
     1. Creación de Documento de Compra
public class Compra extends CouchDbDocument {

    private int id;

    private double total;

    private List<Producto> productos;
    …
}
CouchDB & Android
    Manejo de la Base de Datos
     2. CRUD para los documentos de Compra
public class CompraRepository extends CouchDbRepositorySupport<Compra> {

     public CompraRepository(CouchDbConnector db) {

         super(Compra.class, db);
     }

}
CouchDB & Android
    Manejo de la Base de Datos
     3. Ejemplos de manipulación de BD

compraRepository = new CompraRepository (couchDbConnector);

Compra c = compraRepository.get(id); // Lectura de Compra por ID

couchDbConnector.create( c ); // Creación de documento de Compra

compraRepository.update( c ); // Actualización de documento de Compra

couchDbConnector.delete( c ); // Eliminación de documento de Compra
CouchDB & Android
    Manejo de la Base de Datos
     4. Peticiones en CouchDB

ViewQuery query = new ViewQuery()
                      .designDocId("_design/Compra")
                      .viewName(“por_fecha_compra") .key(“31-01-2013");

List<Compra> compras = db.queryView(query, Compra.class);
Casos de Éxito
Enlaces de interés

  Couchbase – http://www.couchbase.com

  Ektorp – http://goo.gl/dDKC0

  Couchbase Android – http://goo.gl/MMca5

  Cloudant – http://www.cloudant.com
Gracias por su atención,
¿Preguntas?
                    Ricardo Monagas
        Director General de Uppersky

               Twitter: @rmmonagas
       Slideshare: http://goo.gl/GlngJ
 Email: ricardo.monagas@uppersky.co

CouchDB y el desarrollo de aplicaciones Android

  • 1.
    CouchDB y eldesarrollo de aplicaciones Android Ricardo Monagas
  • 2.
    Contenido 1.Big Data 2. NoSQL 3. CouchDB 4. CouchDB & Android 5. Casos de Éxito 6. Enlaces de interés
  • 3.
  • 4.
    2.5 Quintillones deBytes diarios Fuente: http://www-01.ibm.com/software/data/bigdata/ Datos por todos lados 340 Millones de Tweets por día 4000 tweets por segundo Fuente: blog.twitter.com
  • 5.
    Voldemort NoSQL CouchDB BigTable Amazon DynamoDB
  • 6.
    CouchDB Documentos JSON Javascriptpara peticiones MapReduce HTTP para formar un API
  • 7.
    1. Base deDatos orientada en Documentos { “_id”: “453453406456456”, “_rev”: “5345436475658”, “moneda”: “Bs”, “productos”: * { “nombre”: “Manzana”, “precio”: 20, … }, … ], “fecha”: “2012-08-12T13:15:56.684+0000”, “cantidad”: 2, “estado”: “cerrado” … }
  • 8.
    2. Peticiones mediante Documentos de Diseño { "_id": "_design/Compra", "_rev": "371-b2bdc2ce5dd269017f006595328a66ad", "language": "javascript", "views": { “por_fecha_compra": { "map": “ function(doc) { if (doc.fecha && doc.id_usuario && doc.estado === ‘cerrado') emit([doc.id_usuario,doc.fecha], doc); }“ }} }
  • 9.
    ¿Por qué NoSQLy CouchDB? Los datos de la vida real son almacenados en documentos Almacenamiento de la aplicación completa
  • 10.
    ¿Por qué NoSQLy CouchDB? Diseño sin esquemas rígidos Fácil administración, backup, replicación y trabajo offline
  • 11.
  • 12.
    CouchDB & Android Instalación Couchbase Fuente: https://github.com/couchbase/Android-Couchbase
  • 13.
    CouchDB & Android Instalación Ektorp Fuente: https://github.com/helun/Ektorp
  • 14.
    CouchDB & Android Inicialización de CouchDB 1. Creación de instancia ICouchbaseDelegate private final ICouchbaseDelegate mDelegate = new ICouchbaseDelegate() { @Override public void couchbaseStarted(String host, int port) {} @Override public void exit(String error) {} };
  • 15.
    CouchDB & Android Inicialización de CouchDB 2. Declaración de Servicio para Couchbase private ServiceConnection couchServiceConnection;
  • 16.
    CouchDB & Android Inicialización de CouchDB 3. Método de Inicio de Couchbase public void startCouchbase() { CouchbaseMobile couch = new CouchbaseMobile(getBaseContext(), mCallback); couchServiceConnection = couch.startCouchbase(); }
  • 17.
    CouchDB & Android Inicialización de CouchDB 3. Llamada al método startCouchbase public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... startCouchbase(); }
  • 18.
    CouchDB & Android Inicialización de Ektorp 1. Creación del Cliente HTTP public void couchbaseStarted(String host, int port) { httpClient = new AndroidHttpClient.Builder() .host(host) .port(port) .username(username) .password(password) .build(); }
  • 19.
    CouchDB & Android Inicialización de Ektorp 2. Conexión con el servidor de CouchDB CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient); CouchDbConnector db = new StdCouchDbConnector("mydatabase", dbInstance); db.createDatabaseIfNotExists();
  • 20.
    CouchDB & Android Manejo de la Base de Datos 1. Creación de Documento de Compra public class Compra extends CouchDbDocument { private int id; private double total; private List<Producto> productos; … }
  • 21.
    CouchDB & Android Manejo de la Base de Datos 2. CRUD para los documentos de Compra public class CompraRepository extends CouchDbRepositorySupport<Compra> { public CompraRepository(CouchDbConnector db) { super(Compra.class, db); } }
  • 22.
    CouchDB & Android Manejo de la Base de Datos 3. Ejemplos de manipulación de BD compraRepository = new CompraRepository (couchDbConnector); Compra c = compraRepository.get(id); // Lectura de Compra por ID couchDbConnector.create( c ); // Creación de documento de Compra compraRepository.update( c ); // Actualización de documento de Compra couchDbConnector.delete( c ); // Eliminación de documento de Compra
  • 23.
    CouchDB & Android Manejo de la Base de Datos 4. Peticiones en CouchDB ViewQuery query = new ViewQuery() .designDocId("_design/Compra") .viewName(“por_fecha_compra") .key(“31-01-2013"); List<Compra> compras = db.queryView(query, Compra.class);
  • 24.
  • 25.
    Enlaces de interés Couchbase – http://www.couchbase.com Ektorp – http://goo.gl/dDKC0 Couchbase Android – http://goo.gl/MMca5 Cloudant – http://www.cloudant.com
  • 26.
    Gracias por suatención, ¿Preguntas? Ricardo Monagas Director General de Uppersky Twitter: @rmmonagas Slideshare: http://goo.gl/GlngJ Email: ricardo.monagas@uppersky.co