Créditos de la imagen: Microsoft

Una base de datos de series de tiempo (TSDB) es un sistema de software optimizado para ordenar y organizar información medida por el tiempo. Una serie de tiempo es una colección de puntos de datos que se recopilan en intervalos sucesivos y se registran en e orden con la medida del tiempo. Algunos ejemplos de TSDB: operaciones bancarias, mediciones de un sistema de monitorización y observación de microservicios (ver mi workshop al respecto), datos provenientes de IoT, etc.

Las TSDB son útiles para supervisar métricas, como ya expliqué en el curso al que menciono, ya que pueden clasificar grandes y complejas cantidades de datos, haciendo que la información sea más accesible que si se almacena en una base de datos tradicional.

No deja de ser una implementación sobre motores NoSQL, lo mismo que ocurre con Gremlin o Neo4J, donde hablé en su día de las bases de datos de grafos, digamos que estas base de datos son la cuarta después de las bases de datos relacionales, las no relacionales y las de grafos.

¿Qué son los datos de series temporales?

Existen diferencias entre la base de datos que he mencionado y estas TSDB. Por ejemplo, los cambios se insertan en vez de sobrescribirse, por tanto, muestran un historial de esa información. Tambien nos permite realizar análisis más profundos en tiempo real de todos los datos en lugar de usas el otro tipo de base de datos, que es de datos estáticos. Los datos de la TSDB nos permiten revelar una imagen completa de un sistema a lo largo del tiempo y por tanto analizar tendencias históricas. A quien venga de la estadística le sonarán las series estocásticas.

Las características principales de un TSDB son:
  • Los datos se recogen durante un periodo de tiempo determinado.
  • Los datos siempre son inserciones, no existen actualizaciones.
  • Cuando se escriben datos, se asigna automáticamente al intervalo de tiempo más reciente.
¿Por qué es importante una TSDB?

Nos ayudan a supervisar la información en tiempo real (near real-time) y abordar problemas a medida que se producen. Tambien se pueden usar para predecir y actuar en consecuencia.

Están optimizadas para obtener un mayor rendimiento con las consultas a pesar de la cantidad de datos almacenado.

Algunas de las ventajas de utilizar una TSDB
  • Es capad de escanear cantidades extremadamente grandes de datos a la vez.
  • Si los datos se recogen cada milisegundo, la base de datos puede comprimirlos a un minuto o incluso a intervalos más cortos. Es decir, el data sampling.
  • Las TSDB utilizan interfaces de programa de aplicación (API) que se pueden escribir.

Un ejemplo muy claro es Azure Application Insight:

Azure Application Insight

Donde el gasto de almacenamiento en la nube esta ligado a las variables de ingesta, retención de datos y sampling.

Por ejemplo, un caso de uso muy común en el mundo de la monitorización es dejar unas marcas de despliegue (ver articulo al respecto) y ver la diferencia de uso de la CPU Mantener los datos fijos separados de los dinámicos facilita a las TSDBs la búsqueda y la obtención rápida de puntos de datos específicos.

A parte de Azure Application Insight que esta basado en una TSDB, tenemos una base de datos como InfluxDB o Prometheus de código abierto.

Ejemplo de Azure Time Series Inisght

Para mi el problema de una TSDB es:

  • El precio tanto on-premise como en Cloud.
  • El escalado de almacenamiento, tanto físico como de memoria.
  • La política de retención, práctica para eliminar automáticamente la información que ya no es relevante. De este modo, se garantizará que haya espacio suficiente para la nueva información.
  • Y que las TSDB suelen requerir una mayor cantidad de código, así como un código más complejo en las aplicaciones para acceder a los datos.
Conclusión

Existen casos de uso muy claro que directamente nos llevan a una implementación de este tipo de bases de datos y son el motor ideal para ello. Solo tenéis que ver que Microsoft lo hace tanto par IoT con Azure Time Series Insight como Azure Application Insight.