Foto cortesía de Wesley Fryer con permiso bajo licencia CC BY-SA 2.0
resumiendo
Couchbase Móvil es fácil de usar, funciona de forma completamente autónoma, pero proporciona escalado de clase empresarial cuando lo necesita. Debería probarlo.
Al principio
Este será mi segundo post oficial aquí en Couchbase. Próximamente hablaré en el blog de cuestiones más prácticas. Pero de momento, voy a permitirme un discurso de más alto nivel.
Llevo mucho tiempo programando. En los últimos años, me he dedicado de lleno a los móviles, pero he trabajado en muchas otras áreas.
Aún así, supongo que antes de unirme a Couchbase, tenía un conocimiento medio de las bases de datos. O, debería decir, bases de datos relacionales. De algún modo, conseguir la 6ª forma normal siempre me ha parecido genial, pero nunca he tenido que preocuparme por ello.
Aun así, para el desarrollo, las bases de datos relacionales (y, por tanto, SQLite en móviles) parecían el camino a seguir.
En este artículo voy a explicarte por qué he cambiado de opinión y por qué creo que tú también deberías hacerlo.
Preparar el escenario
Hace años, las bases de datos relacionales se habían impuesto a las demás tecnologías. Hasta el punto de que SQL, que en realidad es el nombre de un lenguaje, se convirtió casi en sinónimo del término base de datos.
El mundo ha cambiado mucho con la explosión de la Web y los móviles. Esto incluye los tipos de datos y cómo se accede a ellos. Las bases de datos también tuvieron que cambiar. Así nació el universo NoSQL.
Por qué Couchbase Mobile
Couchbase Mobile (o CBM) es un paquete completo que incluye una base de datos independiente. (La parte independiente se llama en realidad Couchbase Lite.) La arquitectura central de CBM la sitúa de lleno en el campo NoSQL.
Quiero centrarme en dos razones especialmente convincentes por las que creo que CBM debería ser tu primera opción para aplicaciones móviles: facilidad de uso y flexibilidad arquitectónica. Hablaré más sobre el uso de CBM desde el principio de un proyecto. Los mismos puntos constituyen un argumento de peso para cambiar a CBM, incluso en una aplicación madura.
Facilidad de uso
Tanto iOS como Android utilizan SQLite como base de datos estándar. SQLite es una excelente base de datos relacional de código abierto. Pero no es tan fácil de usar.
Fui al portal de desarrolladores de Android para echar un vistazo a la documentación actual sobre el uso de SQLite. Aquí está el comienzo del primer párrafo después de la introducción:
Y aquí tienes un trozo de código de ejemplo para crear una base de datos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
público clase DictionaryOpenHelper extiende SQLiteOpenHelper { privado estático final int VERSIÓN_BASE_DE_DATOS = 2; privado estático final Cadena NOMBRE_TABLA_DICCIONARIO = "diccionario"; privado estático final Cadena DICTIONARY_TABLE_CREATE = "CREAR TABLA" + NOMBRE_TABLA_DICCIONARIO + " (" + PALABRA CLAVE + " TEXTO, " + DEFINICIÓN_CLAVE + " TEXTO);"; DictionaryOpenHelper(Contexto contexto) { super(contexto, NOMBRE_BASE_DE_DATOS, null, VERSIÓN_BASE_DE_DATOS); } @Anular público void onCreate(Base de datos SQLite db) { db.execSQL(DICTIONARY_TABLE_CREATE); } } |
Divertido, ¿verdad?
No me malinterpretes. Android es un paquete tecnológico impresionante. SQLite es el mejor de su clase. Pero las aplicaciones necesitan almacenar datos. Y si estoy tratando de poner en marcha un proyecto, no quiero pasar mi tiempo pensando en el diseño de esquemas y rellenando sentencias SQL en cadenas.
En cambio, esto es más o menos lo que se necesita para empezar con Couchbase Mobile:
1 2 |
director = nuevo Director(nuevo AndroidContext(este), Director.OPCIONES_POR_DEFECTO); base de datos = director.getDatabase("crud"); |
Y aquí está el código (menos las cosas repetitivas) para almacenar algunos datos nuevos:
1 2 3 4 5 6 7 8 |
Documento documento = base de datos.crearDocumento(); Cadena documentId = documento.getId(); Mapa<Cadena, Objeto> perfil = nuevo HashMap<>(); perfil.poner("nombre", "Hod"); perfil.poner("apellido", "Greeley"); documento.putProperties(perfil); |
No es una comparación del todo justa. El ejemplo de Google tiene algunas partes extra que necesitas para hacer las cosas correctamente. Por otro lado, ¡el ejemplo de Couchbase ya tiene datos que van a la base de datos!
El verdadero punto tiene que ver con lo simple que es todo. Es mucho más fácil asignar las estructuras naturales del código (objetos Java, en este caso) a las construcciones necesarias para la base de datos. La facilidad del mapeo permite a CBM ocuparse también de muchos otros detalles. El fragmento de código anterior no es mucho más de lo que costaría serializar un objeto Java en un archivo.
Couchbase es una base de datos de documentos, lo que significa que almacena un objeto completo y semiestructurado como el trozo de datos fundamental (en oposición a una fila en una tabla). Más concretamente, Couchbase almacena objetos JSON. JSON es ligero y flexible. Maneja arrays. Los objetos se pueden extender sin romper nada. Es simplemente más bonito.
Contrasta con tratar de pegar algunas tablas inflexibles para asignarlas a un objeto de cualquier complejidad. Tanto si lo haces tú mismo en SQL como si recurres a una biblioteca para que te ayude, no es nada agradable.
Flexibilidad
Couchbase Mobile te da flexibilidad en dos aspectos importantes, estructura y escalabilidad.
Estructura
CBM no tiene esquemas. Eso se nota en la facilidad de uso. En el ejemplo de código, puede ver que la estructura del documento se crea implícitamente. No es necesario definir tablas ni nombrar columnas.
Además, la ausencia de esquemas permite cambiar fácilmente las estructuras de datos sin quebraderos de cabeza.
Para ilustrar estos puntos, imaginemos que partimos de un perfil de usuario que contiene un número de teléfono para cada persona. Las dos figuras muestran el aspecto que podría tener como tabla SQLite y como documento JSON.



Piensa por un momento en cómo gestionar esa transición. Ni siquiera voy a intentar mostrar el aspecto que podría tener el código.
En cambio, con JSON, tienes este diagrama:

Basta con sobrescribir la entrada del número de teléfono con una matriz. Incluso es fácil manejar la compatibilidad con versiones anteriores. Basta con comprobar en tiempo de ejecución si la entrada de teléfono es un valor único o una matriz.
Escalabilidad
Hasta ahora, todo de lo que he hablado funciona de forma totalmente autónoma en un dispositivo. Eso es potente, y se ocupa de un montón de usos. Algunas bases de datos móviles se detienen ahí. Sólo funcionan de forma autónoma.
Si utilizas una base de datos, lo más probable es que algún tipo de backend sea, al menos, agradable de tener. O podría ser fundamental para su éxito. Me viene a la mente, por ejemplo, proporcionar copias de seguridad para cambiar de dispositivo sin esfuerzo.
Una vez que empiezas a necesitar un backend, tienes que preocuparte de varios retos nuevos. Esto me lleva a mi último punto sobre Couchbase Mobile. CBM tiene muchas características para abordar el uso fuera del dispositivo.
Volviendo a lo que me parece más convincente, la preocupación que destaca aquí es la escalabilidad. ¿Cuánto va a costar gestionar 10.000 usuarios, o incluso 100.000 o un millón? ¿Su arquitectura es capaz de soportar operaciones fuera del dispositivo sin necesidad de grandes cambios?
CBM incluye algo llamado Sync Gateway. Sync Gateway (SG) tiene algunos usos interesantes sólo en combinación con Couchbase Lite. Donde realmente brilla es como punto final de replicación para Servidor Couchbase. Couchbase Server es un paquete NoSQL de uso intensivo preparado para empresas que ya se utiliza en instalaciones importantes. Más información sobre Sync Gateway aquí. La siguiente imagen da una idea de cómo encajan los componentes.

En resumen, CBM no le acorrala. Empezar es fácil y puede hacerlo sabiendo que CBM tiene la flexibilidad necesaria para satisfacer sus necesidades a medida que avanza.
Conclusión
CBM es una solución NoSQL moderna, basada en documentos y altamente escalable para móviles.
-
CBM funciona muy bien de forma aislada, en el dispositivo.
-
Couchbase proporciona un backend completo, si lo deseas.
-
El formato de los datos se adapta fácilmente a las representaciones nativas.
En conjunto, eso te da una solución más fácil de usar para casi cualquier proyecto. Utilízala como un práctico almacén de preferencias de usuario. Utilícela para entregar un paquete estático de datos junto con su aplicación. O utilícela cuando quiera disparar a millones de usuarios activos. Disfrute de la simplicidad y sepa que tiene la flexibilidad para adaptarse y escalar según lo necesite.
Posdata
Hay muchos detalles detrás de los conceptos que he tratado. He incluido algunas referencias para profundizar, aunque me he basado en muchas más para este post.
Consulte más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev. Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.
Puede seguirme personalmente en @HodGreeley
Estoy deseando hablar con usted.