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.












Sunday, November 20, 2016

¿Y si me convierto en Dios? - Sobre la importancia de distribuir conocimiento

Mi colega lo sabe todo, para cualquier pregunta, duda o error, es imprescindible llegar a él. Entonces este genio resuelve rápidamente tu vida junto a la de tu compañía. Él no puede delegar porque siempre tiene una mejor decisión, no puede faltar porque siempre existe alguien esperando por su ayuda, no hay vacaciones de verdad porque tendrá que revisar su email o pensar en lo que dejó pendiente y no puedes pedirle ayuda porque además está muy ocupado.

Reconócelo, estás en problemas

 Personas con esas características en un ambiente laboral pueden escalar rápidamente porque, hay que reconocerlo, tienen una capacidad de aprendizaje y crítica muy buena en cuanto al área donde se desarrollan. Sin embargo, es normal que en sus vidas se dediquen exclusivamente a su trabajo. Si asumimos que hay personas que viven para trabajar y son felices, podríamos concluir que no es problema, pero ¿Qué ocurre si estas personas quieren moverse a una posición o equipo diferente? ¿Habrá alguien que pueda reemplazarlos? ¿Cuántas personas son necesarias para tomar su puesto vacío?

Por otro lado, los colegas que trabajan con un semi Dios, por darle un nombre, se encuentran con otras interrogantes ¿Cuándo me prestará atención para ayudarme? ¿Qué pasaría si él/ella se va de la compañía?

En definitiva, estás en problemas. Tanto la persona que lo sabe todo como los que trabajan con ellos.

La importancia de distribuir conocimiento

Es importante que el conocimiento se distribuya a través de una organización y en los equipos de trabajo. Así nadie es imprescindible, algunos pueden saber mucho sobre algún tema en específico mientras que varios tienen los conocimientos suficientes para realizar tareas donde no sean expertos.

Un equipo de trabajo tiene que caracterizarse por ser capaz de realizar cualquier tarea de forma independiente dentro de su área de responsabilidades y es fundamental que más de una persona pueda desempañarse haciendo tipo de trabajo.

La importancia de delegar

Delegar una tarea no puede verse como la oportunidad para que otra persona nos reemplace, sino que es la oportunidad para que puedas moverte a otra posición e incluso, para poder irte de la compañía sin el cargo de consciencia acerca del futuro en el trabajo que pretendes dejar.

También es la posibilidad de alivianar la carga sobre las actividades donde tienes  responsabilidad, dándole tiempo a otras que no has podido realizar, buscar algunas nuevas o completar de buena manera las que actualmente estás desarrollando. Si lo necesitas podrás darte ese relajo que tanto has esperado.

Para tus colegas es la abertura a nuevos roles o actividades diferentes, alejándolos a una monotonía.


¿Qué hacer cuando encuentras que estás en ese camino?

Si una de las razones por las que tienes tanta responsabilidad e importancia dentro de la compañía es porque no confías en que alguien más sea capaz de realizar la labor tan bien, entonces es esencial tener un plan de entrenamiento y aprovechar cualquier oportunidad para potencial al equipo.

Mientras exista un margen de error, no dudes en delegar. No puedes tener el control sobre todo porque una de las mejores formas de aprender se encuentran en los errores ¿Acaso tu no has aprendido así?. Guíalos en su camino a realizar esas tareas complicadas, la próxima vez podrán hacerlo sólos.

Pedir ayuda a las personas clave para equilibrar el conocimiento en el equipo también es vital, puedes encontrarte en un equipo multidisciplinario que depende de ti, pero el equipo no se encuentra a tu cargo. Así un plan de entrenamiento puede abarcar varias aristas.

Se responsable con tu desarrollo y con el de los demás

Es imprescindible que las sociedades se desarrollen en conjunto. En los casos donde hay una persona o grupo que sabe demasiado mientras se deja a los demás en la ignorancia, suele ocurrir que no hay posibilidades de encontrarse con una buena distribución de felicidad, inteligencia, análisis crítico, etc. Recuerda aquello cuando tú lo haces todo, puede ser que algún día necesites de otros sabios.