Node import: mejorar performance
Ante la necesidad de importar 80000 registros, desde un archivo CSV a un sitio Drupal, nuestro primer impulso fue utilizar el módulo Node Import, para garantizar que todo el proceso de creación de nodos fuera lo más limpio posible y se usaran todas las buenas prácticas existentes, las cuales asumimos incorporadas al módulo.
El resto del sitio ya estaba construido y nos dispusimos a realizar la importación, para llegar a la amarga conclusión del que proceso era extremadamente lento, aun cuando los datos importados eran extremadamente simples: un tipo de contenido CCK, con tres campos.
Como casi siempre ocurre, fue un alivio descubrir que uno no es el único que se encuentra con este tipo de obstáculos y había una gran cantidad de propuestas para mejorar la performance de la importación, que iban desde la simple desactivación de módulos hasta la importación directa a las tablas o cambios en la configuración de la base de datos.
Algunos de los links de ayuda más completos fueron los siguientes:
- http://deekayen.net/add_speed_to_node_import_by_subtracting
- http://cruncht.com/361/uriverse-dbpedia-drupal-case-study
En especial el primero de los links, compartía una experiencia sobre un aumento de diez veces en la velocidad de importación con sólo desactivar una decena de módulos.
Para mantener la idea de hacer la importación respetando las buenas prácticas existentes, decidimos seguir el consejo y desactivamos aproximadamente 25 módulos. Fue altamente desalentador ver sensorialmente que la barra de progreso parecía igual de lenta y, haciendo las cuentas, confirmarlo matemáticamente. La velocidad era exactamente la misma.
Si 25 módulos desactivados no habían mejorado la performance ni un poco, ¿por qué lo haría la desactivación de más módulos? Afortunadamente, desconfiamos de estas inferencias totalmente razonables y lo hicimos igual: desactivamos otros 25 módulos aproximadamente, dejando el Drupal sólo con los módulos esenciales. En esta ocasión, el cambio funcionó y la velocidad de importación se incrementó en un promedio de 20 veces.
Una duda que nos quedó sin contestar hasta el momento es por qué en la primera tanda de desactivaciones el velocidad no cambió en nada, mientras que en la segunda tanda de desactivaciones la velocidad cambio en 20 veces. Una hipótesis es que la curva de cambio no es para nada lineal y, pasada cierta cantidad de módulos activados, la velocidad baja de golpe. Otra hipótesis, la cual intuyo más probable, es que hay ciertos módulos específicos que interfieren particularmente sobre el Node Import.
La razón de no tener tiempo para concluir el experimento es que la situación no fue planteada como un experimento, sino como un obstáculo en la realización de un trabajo. Es por ello que logrado el objetivo, seguimos adelante. La forma de finalizar el experimento sería ir desactivando los módulos de a uno y midiendo el impacto de esa desactivación.
Como nota de interés a partir de nuestra experiencia, en un sitio armado y antes de desactivar 50 módulos, es una buena idea cambiar el Theme activado desde el Custom Theme que estemos usando al Garland u otro de los estándar.



