Saltar a contenido

InfluxDB. Base de datos de series temporales

La información que se aporta a continuación pretende ser complementaria al guion del proyecto y no es de lectura obligatoria.

Motivación

La gestión y almacenamiento de los datos se ha convertido en un aspecto de vital importancia en cualquier arquitectura IIoT&CPS. Para el caso de vuestro proyecto se requiere el uso de una base de datos de tipo temporal, que quiere decir que es capaz de almacenar, además de los datos, en que instante de tiempo se ha escrito en la base de datos cada dato concreto, que pueda interactuar con Node-RED, Grafana y Matlab. El producto seleccionado es InfluxDB en su versión 1.8.

A lo largo de todo el documento os proporcionamos enlaces de directorios concretos de la documentación oficial de InfluxDB en su versión 1.8, que es la siguiente:

https://docs.influxdata.com/influxdb/v1.8/

Estructura de datos

En una misma base de datos de InfluxDB se pueden almacenar distintas series de datos o measurements. Si se toma como ejemplo un archivo Excel (que recibe el nombre de libro) que representa una base de datos de InfluxDB, cada hoja del archivo de Excel sería una serie de datos. Por tanto, si se desea almacenar datos acerca de un proceso industrial, es posible definir una serie de datos para cada magnitud física que se quiera registrar: temperatura, presión, nivel, etc. Por tanto, los datos se pueden organizar en distintas bases de datos (databases) y dentro de una misma base de datos, en diferentes series de datos (measurements).

Cuando una base de datos de InfluxDB recibe una nueva medida asocia dichos datos a una hora de medida (un momento en el tiempo), que recibe el nombre de timestamp. Por defecto, la hora que se le asigna al dato es la hora a la que este ha entrado en la base de datos, pero también es posible definir manualmente que timestamp queremos que se almacene.

Se aporta la siguiente captura para enfatizar que cuando hablamos de una nueva medida o de un nuevo dato nos referimos a una nueva entrada, pudiendo estar contener valores numéricos, palabras, etc. En ella también podéis observar observar los timestamps (columna time) asociados a cada entrada de datos

Fields y tags

Los datos que se almacenan en una serie de datos de InfluxDB concreta se componen siempre de uno o varios fields¸ y opcionalmente de uno o varios tags.

Los fields son la información que se quiere almacenar. En el ejemplo de la captura anterior, los fields son el número de mariposas (butterflies) y abejas (honeybees) que dos científicos han observado.

Por otro lado, los tags, que en la captura anterior son la localización (location) y el científico responsable (scientist), aportan información adicional que permite optimizar el filtrado de información en el caso de querer identificar solo unas entradas de datos concretas.

Podéis encontrar información técnica específica en el siguiente enlace:

https://docs.influxdata.com/influxdb/v1.8/concepts/key_concepts/

Formato de datos y sintaxis

Debéis ser conscientes de los tipos de datos que admite cada elemento (measurement, timestamp, field, tag) así como de su sintaxis.

Podéis encontrar información en el siguiente enlace:

https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_reference/

Interacción con InfluxDB

InfluxDB ofrece una interfaz de línea de comandos (CLI) que permite navegar por los datos almacenados en sus series de datos. Para ello es necesario comunicarse con la base de datos en un lenguaje de peticiones (querys) propio de InfluxDB: InfluxQL o Influx Query Language.

Disponéis de una pequeña demostración en formato vídeo con los procedimientos relacionados con el desarrollo del proyecto.

Podéis encontrar información técnica más específica que menciona todos los comandos y funcionalidades en el siguiente enlace:

https://docs.influxdata.com/influxdb/v1.8/query_language/

Comunicación mediante HTTP

La API (o interfaz de programación de aplicaciones) de InfluxDB permite comunicarse con las bases de datos de InfluxDB mediante peticiones HTTP (por defecto en el puerto 8086). Las bases de datos tienen la capacidad de emitir respuestas en formato JSON.

Como ejemplo, en el documento guía del proyecto se os proporciona una query HTTP en forma de URL (en el punto que hace referencia a la configuración de los puertos de la máquina virtual).

Podéis encontrar información técnica de las peticiones HTTP que admiten y su formato en el siguiente enlace:

https://docs.influxdata.com/influxdb/v1.8/tools/api/#query-http-endpoint

Compatibilidad de InfluxDB

Como se ha mencionado anteriormente, la compatibilidad entre aplicaciones es fundamental para garantizar el buen funcionamiento de la solución tecnológica que se pretende diseñar. Este apartado aporta la relación de InfluxDB con los otros softwares que se utilizan en el desarrollo del proyecto.

Con Node-RED

Dentro de la paleta de Node-RED se pueden encontrar varias librerías que permiten trabajar con bases de datos de InfluxDB. La librería utilizada en el proyecto que desarrollaréis es la siguiente:

https://flows.nodered.org/node/node-red-contrib-influxdb

3 Con Grafana

En la documentación oficial de InfluxDB podéis encontrar el procedimiento para configurar, en Grafana, una base de datos de InfluxDB:

https://docs.influxdata.com/influxdb/v1.8/tools/grafana/

Por otro lado, en la documentación oficial de Grafana se ofrece información específica del plugin que Grafana emplea para ser compatible con bases de datos de InfluxDB:

https://grafana.com/docs/grafana/latest/datasources/influxdb/

Con MATLAB

Se utilizará la siguiente librería para trabajar con InfluxDB desde MATLAB:

https://github.com/EnricSala/influxdb-matlab