Mejores prácticas para trabajar con grandes conjuntos de datos

Con el paso del tiempo, los volúmenes de datos que manejamos a diario va creciendo cada vez más.

Hoy por hoy, es común hablar de Terabytes de información en lugar de los Gigabytes de hace algunos años o los Kilobytes de décadas atrás.

El desafío del procesamiento de estos grandes volúmenes de datos nos exige mayor atención en cada detalle y la utilización de buenas prácticas para lograr un resultado óptimo.

Existen en el mercado varias herramientas que nos ayudan en el procesamiento de nuestra información.

Desde controles sintácticos o semánticos en los datos que me envía mi proveedor de pagos online hasta la carga de datos en nuestra base de datos corporativa para ser utilizados en nuestro ERP o en nuestro DataWarehouse para ser utilizados en nuestras herramientas de
Inteligencia de Negocios.

A continuación mencionamos algunas de estas buenas prácticas aplicadas al procesamiento de grandes volúmenes de datos mediante el uso de la herramienta de integración «Pentaho data integration».

Antes que nada, debemos tener en cuenta los recursos disponibles en nuestro servidor de procesamiento. Debemos hacer un uso óptimo de estos recursos para hacer nuestra tareas lo mejor posible.

Principales recursos a tener en cuenta:

  • Cantidad y tipo de CPUs
  • Cantidad de Memoria disponible
  • Tipo de almacenamiento (discos duros, bases de datos, etc.)
  • Capacidad de transmisión de datos de mi red

Check-list de tareas a tener en cuenta:

  1. Ajustar los parámetros de uso de memoria de mi herramienta Asignar suficiente memoria para llevar adelante el trabajo (teniendo en cuenta la memoria que utilizan otras aplicaciones y el propio Sistema operativo de mi servidor).Consejo: No excederse en el uso de memoria. Por ejemplo, no asignar un Gigabyte de memoria para procesar un archivo de texto de algunos cientos de lineas.Otro uso que le podemos dar a nuestra memoria es para aumentar la catidad de registros que se mantienen en el buffer entre los distintos pasos de mi trabajo y de esta forma mejorar los tiempos (por ejemplo, puedo mantener en memoria los registros que uso como lookup para no estar leyendo constantemente estos datos).

  2. Aprovechar al máximo las posibilidades de lectura de datos que me provee mi sistema fuente Por ejemplo, si estoy leyendo archivos de texto podría almacenar estos archivos en diferentes discos duros y disparar lecturas en paralelo para aprovechar mejor el hardware disponible. Esto también es válido si mis datos están en una batería de discos (RAID) o en dispositivos externos especializados (por ejemplo: SAN o NAS).Lo mismo aplica si mi fuente de datos es una Base de datos (se pueden disparar lecturas en paralelo cuidando de no saturar al servidor de Bases de datos).

    PDI nos proporciona mecanismos para paralelizar el acceso a los datos. Por ejemplo, en el caso de los archivos de texto, podemos definir qué se lean en paralelo y cuántos procesos de lectura se generan. Si tengo un archivo de 4 GB, puedo disparar 4 procesos en paralelo que se repartirán el trabajo de lectura. El primer proceso leerá desde la linea 1 hasta la linea que corresponde a 1 GB, el segundo proceso lo hará desde 1 GB hasta 2 GB y así con el resto del archivo.

  3. Ejecutar varias copias de los pasos de mi trabajo que más recursos consumen (Scale up) Si detecto que hay algunos pasos de mi trabajo que son «cuello de botella» en mi proceso, puedo correr multiples copias de estos pasos para bajar así el tiempo total a expensas de mayor consumo de recursos.

    Cuidado! No poner más copias de la cantidad deCPUs que tengo disponible.

  4. Ejecutar los trabajos en un cluster de servidores de integración (Scale out) En el caso que los recursos de mi servidor no sean suficientes para ejecutar mi proceso dentro de los tiempos aceptables para mi negocio, es posible crecer en capacidad de procesamiento aumentando la cantidad de servidores.Para lograr esto es necesario configurar un Cluster de servidores PDI. En dicho Cluster, un servidor oficiará de servidor Maestro y los demás oficiarán de servidores Esclavos.

    La idea es que el servidor Maestro se encargue de distribuir el trabajo a los demás servidores y consolidar los resultados que devuelva cada uno de ellos repartiendo así la carga de trabajo y mejorando el tiempo total.

    En esta estrategia debemos tener siempre presente la forma de ejecución que estamos usando y la separación de datos que realicemos. Por ejemplo, debemos tener en cuenta que si ordenamos los resultados en los servidores Esclavos, será necesario agrupar los mismo en el servidor Maestro de manera tal que el resultado final se mantenga ordenado (hay pasos específicos para esto).

    Por supuesto que se pueden combinar ambas estrategias (Scale up y Scale out).

Por último, un consejo:

Testea bien las transformaciones antes de pasar a producción!!!

Arma un entorno de pruebas lo más parecido posible al entorno de producción y haz un buen plan de pruebas que cubra la mayor cantidad de casos posible.

No sería la primera vez que el resultado de una optimización es que el sistema funcione peor 😉