Presentant KafkaDB
Avui volem presentar-vos el KafkaDB, la nostra nova criatura que acabem de publicar a bitbucket. KafkaDB és una eina que simplificarà la tasca de migrar bases de dades entre versions d'OpenERP, però també es podria estendre per permetre la migració entre versions d'altres aplicacions basades en PostgreSQL. A la pàgina principal del projecte, podeu trobar informació detallada sobre el disseny i com utilitzar-lo, però ara volia fer-vos cinc cèntims de com hem arribat fins aquí.
Els requeriments
Des que OpenERP SA va anunciar que les eines de migració no formarien part del programari públic, vam començar a donar voltes a com podríem implementar-les de forma reutilitzable. Algunes empreses van buscar solucions a curt termini, simplement mirant de solucionar el problema per a un o dos clients que volien passar de la 4.2 o la 5.0 a la 6.0 i posposant la cerca de la solució real. Nosaltres estàvem convençuts que, de la mateixa manera que l'herència havia permès a OpenERP tenir centenars de mòduls fets i alliberats per molts desenvolupadors, podríem aconseguir el mateix per a les migracions.
Així que bàsicament havíem d'implementar quelcom que resolgués els requeriments següents:
- Modular: havia de proveir un mecanisme mitjançant el qual es poguessin reutilitzar les transformacions de dades implementades per a una base de dades en una altra.
- Ràpid: donada la mida de les bases de dades d'alguns dels nostres clients, sabíem que hauríem de moure la informació a nivell de base de dades.
- Compartible: a més de ser modular, volíem assegurar-nos que fos senzill per a tothom compartir les seves transformacions. Atès que la informació sobre la migració no estaria inclosa en els mòduls, necessitàvem que fos senzill de compartir, així com de trobar quines transformacions hi havia disponibles.
Recerca i desenvolupament
Ens va costar un cert temps arribar al disseny actual de KafkaDB. El procés va començar amb una petita prova de concepte utilitzant Python i openetl, un ETL creat per OpenERP SA, però abandonat el juny de 2011. Vam descartar aquesta opció, no tan sols perquè estava abandonada, sinó també perquè l'API no era gaire intuïtiva. A més, tot i que no vàrem arribar a fer proves, semblava que podia ser relativament lenta.
La primera alternativa va ser buscar un altre ETL basat en Python. Aquesta vegada el candidat va ser Brewery. Aquest tenia una API força millor, però no disposava d'algunes funcionalitats bàsiques que necessitàvem i, malgrat que hauríem pogut contribuir al projecte, necessitàvem centrar-nos a resoldre els problemes que teníem, no a implementar un ETL des de zero.
Hauríem volgut que fos en Python, especialment per fer més senzill que la gent hi contribuís, però vam començar a buscar alternatives en altres llenguatges. Scriptella va ser el primer candidat i basa la seva configuració en un fitxer XML, així que ens va semblar atractiu. Ja sabíem que el sistema que escollíssim acabaria tenint un fitxer de configuració, així que a primer cop d'ull semblava que aquesta podia ser una bona opció perquè el sistema ja depenia d'un. Malgrat això, no ens va convèncer el comportament per defecte d'algunes opcions del sistema, a més del fet que l'XML semblava que podria ser poc pràctic, ja que fàcilment podíem arribar a les 400 taules.
Així que Àngel, un dels meus socis i el nostre expert en Kettle i grans migracions de dades, va començar a jugar amb l'API del Kettle i a fer una ullada per veure què es podia fer amb transformacions manuals i alguns automatismes. Aviat es va adonar que no tan sols podia complir tots els requeriments que teníem, sinó que, a més, permetia que persones que no fossin desenvolupadores també poguessin migrar la seva base de dades. Per exemple, diversos dels nostres clients s'ho podrien fer ells mateixos si ho desitgessin!
A més, el Kettle és probablement l'ETL estàndard de facto, especialment entre la comunitat OpenERP (gràcies al Terminatooor, un connector per al Kettle creat per Akretion, especialment dissenyat per funcionar amb OpenERP).
En resum, tot i que KafkaDB no està acabat del tot encara, estem convençuts que constitueix una bona base per al sistema de migracions flexible que necessitem, no tan sols per migrar informació entre versions d'OpenERP, sinó també entre aplicacions diferents, sempre que es necessiti reutilitzar el procés per a diferents bases de dades amb estructures semblants.