Friday, December 2, 2016

Flyway - Automatizar la migración de bases de datos

Uno de los problemas comunes al habilitar una nueva versión de un producto Software es coordinarla con una base de datos (BD) que contenga  las tablas/colecciones y datos acordes con la versión a utilizar. ¿Qué hacer cuando ya tenemos una base de datos poblada con información que debe mantenerse y además hay que hacer cambios sobre la base de datos para que funcione la nueva versión? Dejando aparte la recomendación de hacer un backup, es imprescindible tener una estrategia automatizable para realizar este proceso.

Flyway


Al rescate puede llegar algo más avanzado que analizar las diferencias entre los scripts, algo así como encontrar las diferencias y probar si todo funciona bien, lo cual es muy propenso a errores.

Es aquí donde nos encontramos con Flyway, una herramienta de migración para base de datos SQL (para casos NoSQL existen otras tecnologías también) de forma versionada. Usando Flyway tenemos archivos versionados, que contienen los scripts, dentro de un directorio donde la estrategia para manejar las versiones depende de cada compañía/producto. Sin embargo, podemos utilizar un alcance simple donde se añade un script para cada nueva versión del producto.



Los nuevos scripts pueden contener nuevas tablas, inserciones en las bases de datos y cualquier otra operación que pueda manejarse por medio de scripts y que entienda la base de datos a utilizar. Mucho cuidado con los delete y cambios en columnas de tablas.

Operaciones


Flyway posee soporte para una gran variedad de bases de datos SQL y en el caso de no existir un soporte, puede ser customizado e integrar lo que se necesite. Las operaciones implementadas son las siguientes:

  • migrate: migra la BD.
  • clean: limpia la BD.
  • info: entregar información de la BD migrada
  • validate: valida que la BD tenga todas las versiones en orden.
  • repair: repara una BD con problemas de migración en sus versiones.

¿Cómo la base de datos conoce la versión de migración?


Tal como lo hacen otras tecnologías similares, en la base de datos se agrega una nueva tabla donde se especifica la versión de scripts migrada. Así evita que un script sea ejecutado más de una vez.

Implementación


Con respecto a cómo implementar esta tecnología, tenemos varias opciones.

- Utilizar la librería como dependencia e implementar las migraciones invocando a los métodos que disponibiliza su API en JAVA.
- Invocarlo como comando. En este caso, la máquina debe tener el comando Flyway disponible.
- Ejecutar el Mojo desde Maven. Éste modo no necesita código y la lista de operaciones pueden customizadas usando el archivo pom.xml. Personalmente, es la opción que más me acomoda.

Existen otras características para Flyway que no vale la pena mencionar por aquí, pero que puedes encontrar en la documentación oficial de Flyway.

Para terminar


Recuerda que el proceso de migración puede resultar un dolor de cabeza en proyectos grandes y existen formas inteligentes para manejar este proceso. No olvides investigar las otras alternativas y decidirte con alguna viable según las necesidades de tu producto.












No comments:

Post a Comment