Diseño de aplicaciones

Trasladar el contenido de una base de datos SQL a Couchbase

Desde el lanzamiento GA de N1QL, recibimos muchas preguntas sobre cómo mover contenido de una base de datos SQL a Couchbase. Hay muchas maneras diferentes de hacerlo. Hoy he elegido la que probablemente sea la más sencilla. Transformaré cada fila de cada tabla en un JsonDocument y lo almacenaré en Couchbase. Haré mi prueba con Postgres y su conjunto de datos de muestra inspirado en MySQL Muestra Sakila. Utilizaré Java, pero las directrices que aquí se presentan son aplicables a otros lenguajes.

Conexión a una base de datos SQL en ejecución

Como estoy usando Java, implementaré Spring Boot y su paquete JDBC, que maneja la conexión db por mí. Todo lo que tengo que hacer es establecer las dependencias y propiedades correctas para configurar el paquete JdbcTemplate. Este objeto facilita la ejecución de consultas SQL.

Dependencias

Para asegurarte de que tienes todo configurado de forma ordenada y automática necesitas las siguientes dependencias:

Estoy probando con Postgres pero se podría añadir cualquier otro driver soportado por Spring JDBC. El spring-boot-starter-data-jpa me permitirá inyectar el JdbcTemplate preconfigurado.

Configuración

Para asegurarse de que el framework Spring encuentra su base de datos, añada las siguientes propiedades a su archivo de configuración (por ejemplo, src/main/resources/application.properties).

Por supuesto, usted tendrá que ajustar esto de acuerdo a la base de datos que está utilizando. Aquí estoy usando Postgres corriendo en 192.168.99.100 con el puerto por defecto 5432. El nombre de la base de datos que quiero usar es dvdrental.

Código

Si todo está configurado correctamente deberías poder inyectar el JdbcTemplate y empezar a consultar tu BD SQL.

Conexión a Couchbase

Mi objetivo es mover el contenido de una base de datos SQL a Couchbase, por lo que también necesitamos una conexión Couchbase.

Dependencias

Trabajar con Couchbase en tu proyecto Java requiere que añadas la siguiente dependencia:

Esto le dará acceso a Couchbase SDK de Java.

Configuración

Una configuración básica de Couchbase requiere básicamente tres propiedades: una dirección IP del servidor, un nombre de bucket y una contraseña de bucket. Hacer esto de una manera Spring Boot se vería así:

Las propiedades hostname, bucket y password pueden añadirse directamente al archivo de propiedades de tu aplicación.

Código

Con Couchbase, el nivel de granularidad equivalente a una base de datos sería un bucket, que es donde almacenas los documentos. Con la configuración anterior puedes simplemente inyectar un bucket y empezar a jugar.

Tablas

En este punto tienes una conexión a una base de datos SQL y a Couchbase. Ahora podemos empezar a mover cosas. La forma más fácil de mover datos es considerar cada fila de cada tabla como un documento.

Obtención del esquema SQL

Empecemos por obtener el esquema de la base de datos automáticamente usando el JdbcTemplate. El objeto interesante aquí es DatabaseMetaDataque puede darnos la estructura completa de la base de datos. La API no es la más fácil de usar, pero al menos está documentada.

Voy a mapear el resultado de la consulta DatabaseMetaData a una lista de Tabla y Columna. Para ello he creado la siguiente clase Java:

Definitivamente no es el código más emocionante de escribir, pero al final obtienes una representación JSON de las tablas de tu base de datos SQL.

Contenido

Aquí está la parte divertida. Aquí es donde empezamos a mapear una fila de tabla a un JsonDocument. La sección anterior nos pone en un estado en el que podemos recuperar el nombre de todas las tablas. A partir de un nombre de tabla, podemos crear una consulta SQL que devuelva todas las filas de la tabla.

Spring dispone de un mecanismo que permite definir un RowMapper. Para cada fila devuelta por la consulta, puedes devolver el objeto que quieras. Como estoy usando Couchbase, quiero un JsonDocument.

A continuación se muestra un ejemplo de implementación. Este RowMapper necesita un objeto Table previamente definido; por lo tanto, tenemos que implementar el método mapRow. Hay varias cosas que tenemos que hacer aquí.

La primera tarea es crear una clave única. Como las filas se clasifican por tablas, algunos identificadores pueden ser exactamente los mismos para filas de diferentes tablas. Pero los documentos se clasifican por bucket, por lo que necesitamos crear una clave de documento única que refleje el id de la fila y el nombre de la tabla. Para no perder de vista la procedencia del documento, también añadiré un campo _tableName para el nombre de la tabla.

Luego, el paso emocionante viene del mapeo de tipos. JSON soporta menos tipos que una base de datos SQL, así que tenemos que hacer alguna conversión aquí. Esto es lo que hace el método getJsonTypedValue. Se asegura de que la mayoría de los tipos JDBC puedan ser convertidos a un tipo JSON nativo (String, number, boolean, array, object, null). Al final, tenemos un JsonDocument que puede ser guardado en Couchbase.

Con ese RowMapper hace las cosas realmente fáciles. Podemos hacer un bucle con el nombre de la tabla, ejecutar la consulta y guardar los resultados en Couchbase. Haciendo esto de una manera sincrónica se vería así:

Pero prefiero la versión asíncrona:

Aquí no estoy utilizando todo el potencial de Rx; eche un vistazo a esta función que escribe un documento en Couchbase y gestiona el tiempo de espera y los errores.

 

Para mayor comodidad, he empaquetado todos los pasos implementados y mostrados anteriormente en un proyecto único. Todo lo que tienes que hacer es asegurarte de que tu archivo de propiedades está bien configurado y ejecutar el importador:

Eche un vistazo al LÉAME para más información.

Conclusión

Hoy hemos aprendido a mover contenido SQL a Couchbase, pero todavía queda algo de trabajo por hacer. La próxima vez os contaré cómo mover la lógica de negocio SQL a la capa de aplicación.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Laurent Doguin

Laurent es un metalero empollón que vive en París. Principalmente escribe código en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programación reactiva y otras cosas de moda. También fue Developer Advocate de Clever Cloud y Nuxeo, donde dedicó su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.