Presentando KafkaDB

Albert Cervera i Areny 7 nov 2011

Hoy queremos presentaros KafkaDB, nuestra nueva criatura que acabamos de publicar en bitbucket. KafkaDB es una herramienta que simplificará la tarea de migrar bases de datos entre versiones de OpenERP, pero también se podría extender para permitir la migración entre versiones entre otras aplicaciones basadas en PostgreSQL. En la página principal del proyecto, podéis encontrar información detallada sobre el diseño y como utilitzarla, pero ahora quería haceros cinco céntimos de cómo hemos llegado hasta aquí.  

Los requerimientos

Desde que OpenERP SA anunció que las herramientas de migración no formarían parte del software público empezamos a dar vueltas en cómo podríamos implementarlas de forma reutilizable. Algunas empresas buscaron soluciones a corto plazo, simplemente mirando de solucionar el problema para uno o dos clientes que querían pasar de la 4.2 o la 5.0 a la 6.0 y posponiendo la búsqueda de una solución real. Nosotros estábamos convencidos que de la misma manera que la herencia había permitido a OpenERP tener centenares de módulos hechos y liberados por muchos desarrolladores, podríamos conseguir lo mismo con las migraciones. Así que básicamente teníamos que implementar algo que solucionara los siguientes requerimientos:
  • Modular: tenía que proveer un mecanismo mediante el cual se pudieran reutilizar las transformaciones de datos de una base de datos a otra.
  • Rápido: dada la medida de las bases de datos de algunos de nuestros clientes, sabíamos que tendríamos que mover la información a nivel de base de datos.
  • Fácil de compartir: además de ser modular, queríamos asegurarnos que sería sencillo para todo el mundo compartir sus transformadas. Dado que la información sobre la migración no estaría incluida en los módulos, necesitábamos que fuera sencillo de compartir, así cómo de encontrar qué transformadas había disponibles.

Búsqueda y desarrollo

Nos ha costado un cierto tiempo hasta llegar al diseño actual de KafkaDB. El proceso empezó con una pequeña prueba de concepto utilizando Python y openetl, un ETL creado por OpenERP SA, pero abandonado este mes de junio. Descartamos esta opción, no tan sólo porqué estaba abandonado, sino también porqué la API no era intuitivo. Además, a pesar de que no llegamos a hacer pruebas, parecía que podía ser relativamente lento. La primera alternativa fue buscar otro ETL basado en python. Esta vez el candidato fue el Brewery. Éste tenía una API bastante mejor pero no disponía de algunas funcionalidades básicas que necesitábamos y a pesar de que habríamos podido contribuir al proyecto, necesitábamos centrarnos en solucionar los problemas que teníamos, no a implementar un ETL desde cero. Habríamos querido que fuera en python, especialmente para hacer más sencillo que la gente contribuyera, pero empezamos a buscar alternativas en otros lenguajes. Scriptella fue el primer candidato y éste basa su configuración en un fichero XML, así que nos pareció atractivo. Ya sabíamos que el sistema que escogiéramos acabaría teniendo un fichero de configuración, así que a primer vistazo parecía que esta podía ser una buena opción porque el sistema ya dependía de uno. A pesar de esto, no nos convenció el comportamiento por defecto de algunas opciones del sistema, además del hecho que el XML parecía que podría ser poco práctico puesto que fácilmente podíamos llegar a las 400 tablas. Así que Àngel, uno de mis socios y nuestro experto en Kettle y grandes migraciones de datos, empezó a jugar con la API de Kettle y mirar a ver qué se podía hacer con transformadas manuales y algunos automatismos. Pronto se dio cuenta, que no tan sólo podía cumplir todos los requerimientos que teníamos, sino que además, permitíamos que personas que no fueran desarrolladores también se podían migrar su base de datos. Por ejemplo, varios de nuestros clientes se lo podrían hacer ellos mismos si lo desearan! Además, Kettle es probablemente el ETL estándar de facto y especialmente entre la comunidad OpenERP (gracias a Terminatooor, un conector para Kettle creado por Akretion, especialmente diseñado para funcionar con OpenERP). En resumen, a pesar de que KafkaDB no está acabado del todo todavía, estamos convencidos que constituye una buena base para el sistema de migraciones flexible que necesitamos, no tan sólo para migrar información entre versiones de OpenERP, sino también entre aplicaciones diferentes siempre y cuando se necesite reutilizar el proceso para diferentes bases de datos con estructuras parecidas.  

Links destacados

 

Arriba