Back y Arquitectura

Guardar datos de Entidades utilizando S3

En muchos proyectos es muy común querer guardar datos históricos almacenados en Entidades, de forma que posteriormente se pueda aligerar el tamaño de los datos en las bases de datos. Un ejemplo, sería leer datos de Entidades y almacenarlos como ficheros en S3. Por ejemplo, de esta forma, se podrían tener backups de datos de Entidades en S3.

En esta entrada vamos a ver ejemplos útiles con el módulo Onesait Platform Dataflow para implementar todos estos casos de uso.

El objetivo no es dar una guía paso a paso de cómo replicar el ejemplo. Aquí se resaltarán las configuraciones más relevantes en cada pipeline. Empecemos con cómo guardar datos desde Entidades a S3.

Escritura en S3

Vamos a comenzar con el ejemplo más sencillo, que sería la lectura de los datos y la escritura directamente usando S3.

En esta primera aproximación lo que hacemos es definir una conector con Onesait Platform como origen. Este conector ejecutará una query para leer los datos que se quieran almacenar. Por ejemplo, se podría querer leer todos los datos anteriores a una fecha determinada.

Una vez leídos los datos, usaremos el componente Amazon S3 para almacenar los datos utilizando S3. Aunque el componente se llame Amazon S3, se puede utilizar otro almacenamiento que soporte S3. En concreto, en este ejemplo utilizamos la integración de MinIO que tenemos en Onesait Platform.

Para configurar el conector de Onesait Platform, hay que tener en cuenta principalmente lo siguiente:

  • En la pestaña Connection, tenemos que rellenar los valores «Token» e «IoT Client» con los valores del Digital Client que vayamos a utilizar, teniendo en cuenta que este Digital Client debe tener permisos sobre la Entidad de la cual tomaremos los datos.
  • En Ontology deberemos poner el nombre de la Entidad elegida para este proceso, como se muestra en la imagen anterior, y donde podemos hacer uso de los parámetros
  • En la pestaña Configuration deberemos escribir la query que usaremos para obtener los datos de la Entidad

Para configurar el destino S3 los datos más relevantes son:

Algo que hay que tener en cuenta con este ejemplo es que, por cómo funciona S3, con esta configuración se creará un fichero nuevo por cada batch de datos leídos de la Entidad origen. Si la Entidad contiene pocos datos se podrían leer todos los datos de una sola vez y generar un sólo fichero o usar un tamaño de batch lo suficientemente grande para que se genere un número aceptable de ficheros en S3. Sin embargo esto es bastante limitado si tenemos un gran número de datos.

Esto nos lleva a la evolución lógica de este ejemplo, que es contar con un paso intermedio que cree los ficheros con el tamaño que nos interese para almacenarlos en S3, con independencia del tamaño del batch, lo que nos permitirá incluso trabajar en streaming si fuese necesario.

Para ello, vamos a partir el flujo de datos en dos flujos. El primero se en cargará de leer de Onesait Platform y crear ficheros temporales con los datos. El segundo leerá los ficheros temporales y los guardará en S3. Además este segundo flujo de datos eliminará el fichero una vez esté en S3.

El primer flujo tendrá este aspecto:

Sin entrar en los detalles de configuración, lo relevante aquí es elegir el tamaño de fichero teniendo en cuenta el tamaño de fichero que queremos tener en S3. El destino Local S3 permite definir este valor en base a número de líneas y tamaño de fichero. Se puede observar que se ha implementado un flujo de eventos para parar el pipeline. Esto no es obligatorio y dependerá del caso de uso. Para este ejemplo se ha hecho para que se pare automáticamente cuando termine de ejecutar la query que hay configurada, sin quedarse a escuchar nuevos registros que pudiesen llegar más adelante.

El segundo flujo de datos es parecido al original, salvo que lee de un directorio local.

Lo más relevante en este caso es que en todos los casos anteriores estábamos trabajando a nivel de registros utilizando formato JSON. En este caso ya no es necesario. En este ejemplo en el directorio local tenemos el fichero temporal ya formateado como nos interesa subirlo a S3 por lo tanto no necesitamos volver a parsear todas las líneas. Para evitar este procesamiento innecesario se utiliza el formato wholefile para leer del directorio local y para escribir en S3.

Además, para evitar tener que gestionar manualmente los ficheros temporales, en el directorio de origen se ha configurado la opción de post procesado para que borre los ficheros ya tratados.

Escritura en Onesait Platform leyendo desde S3

Este es un ejemplo bastante sencillo. Lo más relevante es configurar el origen Amazon S3 para que lea los ficheros que se desee y configurar un destino para Onesait Platform. Por ejemplo, esto se podría hacer para restaurar una entidad en base a ficheros almacendados en S3.

Conclusiones

En este ejemplo hemos visto cómo con flujos de datos muy sencillos se pueden crear procesos que importen y exporten datos entre Entidades en Onesait Platform y un almacén de datos que use S3, por ejemplo AWS S3 o MinIO. Estos flujos se pueden utilizar junto con las capacidades del módulo Flowengine para automatizar estas tareas.


Imagen de cabecera: David Ballew en Unsplash

✍🏻 Author(s)

Deja una respuesta