sql >> Base de Datos >  >> RDS >> Database

Una introducción a las bases de datos de series temporales

Atrás quedaron los tiempos en los que "la" base de datos era un único sistema de gestión de base de datos relacional instalado normalmente en el servidor más potente del centro de datos. Dicha base de datos atendió todo tipo de solicitudes:OLTP, OLAP, cualquier cosa que requiera el negocio. Hoy en día, las bases de datos se ejecutan en hardware básico, también son más sofisticadas en términos de alta disponibilidad y están especializadas para manejar un tipo particular de tráfico. La especialización les permite lograr un rendimiento mucho mejor:todo está optimizado para manejar un tipo particular de datos:optimizador, motor de almacenamiento, incluso el lenguaje no tiene que ser SQL, como solía ser en el pasado. Puede estar basado en SQL con algunas extensiones que permiten una manipulación de datos más eficiente, o también puede ser algo totalmente nuevo, creado desde cero.

Hoy tenemos bases de datos analíticas en columnas como ClickHouse o MariaDB AX, tenemos grandes plataformas de datos como Hadoop, soluciones NoSQL como MongoDB o Cassandra, almacenes de datos clave-valor como Redis. También disponemos de bases de datos Time-Series como Prometheus o TimeScaleDB. Esto es en lo que nos centraremos en esta publicación de blog. Bases de datos de series temporales:qué son y por qué querría utilizar otro almacén de datos en su entorno.

¿Para qué sirven las bases de datos de series temporales?

Como sugiere el nombre, las bases de datos de series temporales están diseñadas para almacenar datos que cambian con el tiempo. Puede ser cualquier tipo de datos recopilados a lo largo del tiempo. Pueden ser métricas recopiladas de algunos sistemas:todos los sistemas de tendencias son ejemplos de datos de series temporales.

Cada vez que mira los tableros en ClusterControl, en realidad está mirando la representación visual de los datos de series temporales almacenados en Prometheus, una base de datos de series temporales.

Los datos de series temporales no se limitan a las métricas de la base de datos. Todo puede ser una métrica. ¿Cómo cambia el flujo de personas que ingresan a un centro comercial con el tiempo? ¿Cómo cambia el tráfico en una ciudad? ¿Cómo cambia el uso del transporte público durante el día? Flujo de agua en un arroyo o un río. Cantidad de energía generada por una planta de agua. Todo esto y todo lo demás que se puede medir en el tiempo es un ejemplo de los datos de series temporales. Dichos datos se pueden consultar, trazar, analizar para encontrar correlaciones entre diferentes métricas.

¿Cómo se estructuran los datos en una base de datos de series temporales?

Como puede imaginar, el dato más importante en la base de datos de series temporales es el tiempo. Hay dos formas principales de almacenar datos. Uno, algo que se asemeja al almacenamiento de clave-valor puede verse así:

Marca de tiempo Métrica 1
2019-03-28 00:00:01 2356
2019-03-28 00:00:02 6874
2019-03-28 00:00:03 3245
2019-03-28 00:00:04 2340

En resumen, para cada marca de tiempo tenemos algún valor para nuestra métrica.

Otro ejemplo implicará más métricas. En lugar de almacenar cada métrica en una tabla o colección separada, es posible almacenar varias métricas al mismo tiempo.

Marca de tiempo Métrica 1 Métrica 2 Métrica 3 Métrica 4 Métrica 5
2019-03-28 00:00:01 765 873 124 98 0
2019-03-28 00:00:02 5876 765 872 7864 634
2019-03-28 00:00:03 234 7679 98 65 34
2019-03-28 00:00:04 345 3 598 0 7345

Esta estructura de datos ayuda a consultar los datos de manera más eficiente cuando las métricas están relacionadas. En lugar de leer varias tablas y unirlas para reunir todas las métricas, basta con leer una sola tabla y todos los datos están listos para ser procesados ​​y presentados.

Quizás se pregunte:¿qué hay realmente de nuevo aquí? ¿En qué se diferencia esto de una tabla normal en MySQL u otra base de datos relacional? Bueno, el diseño de la tabla es bastante similar pero hay diferencias significativas en la carga de trabajo que, cuando un almacén de datos está diseñado para explotarlas, puede mejorar significativamente el rendimiento.

Los datos de series temporales generalmente solo se agregan; es muy poco probable que actualice datos antiguos. Por lo general, no elimina filas particulares; por otro lado, es posible que desee algún tipo de agregación de datos a lo largo del tiempo. Esto, cuando se tiene en cuenta al diseñar los componentes internos de la base de datos, marcará una diferencia significativa con respecto a las bases de datos relacionales "estándar" (y no relacionales también) destinadas a servir el tipo de tráfico de procesamiento de transacciones en línea:lo más importante es la capacidad de almacenar de manera consistente (jngest) grandes cantidades de datos que llegan con el tiempo.

Es posible utilizar un RDBMS para almacenar datos de series temporales, pero el RDBMS no está optimizado para ello. Los datos y los índices generados en la parte posterior pueden volverse muy grandes y lentos para consultar. Los motores de almacenamiento utilizados en RDBMS están diseñados para almacenar una variedad de tipos de datos diferentes. Por lo general, están optimizados para la carga de trabajo del procesamiento de transacciones en línea, que incluye la modificación y eliminación frecuente de datos. Las bases de datos relacionales también tienden a carecer de funciones y características especializadas relacionadas con el procesamiento de datos de series temporales. Mencionamos que probablemente desee agregar datos que tengan más de un cierto período de tiempo. Es posible que también desee poder ejecutar fácilmente algunas funciones estadísticas en sus datos de series de tiempo para suavizarlos, determinar y comparar tendencias, interpolar datos y mucho más. Por ejemplo, aquí puede encontrar algunas de las funciones que Prometheus pone a disposición de los usuarios.

Ejemplos de bases de datos de series temporales

Hay múltiples bases de datos de series temporales existentes en el mercado, por lo que no es posible cubrirlas todas. Todavía nos gustaría dar algunos ejemplos de las bases de datos de series de tiempo que puede conocer o incluso usar (a sabiendas o no).

InfluxDB

InfluxDB ha sido creado por InfluxData. Es una base de datos de series temporales de código abierto escrita en Go. El almacén de datos proporciona un lenguaje similar a SQL para consultar los datos, lo que facilita la integración de los desarrolladores en sus aplicaciones. InfluxDB también funciona como parte de una oferta comercial, que cubre toda la pila diseñada para proporcionar un entorno de alta disponibilidad y con todas las funciones para procesar datos de series temporales.

Prometeo

Prometheus es otro proyecto de código abierto que también está escrito en Go. Se usa comúnmente como backend para diferentes herramientas y proyectos de código abierto, por ejemplo, Percona Monitoring and Management. Prometheus también ha sido una base de datos de serie temporal de elección para ClusterControl.

Prometheus se puede implementar desde ClusterControl para almacenar los datos de series temporales recopilados en los servidores de bases de datos supervisados ​​y administrados por ClusterControl:

Al ser ampliamente utilizado en el mundo del código abierto, Prometheus es bastante fácil de integrar en su entorno existente utilizando múltiples exportadores.

Herramienta RRD

Este podría ser un ejemplo de base de datos de series de tiempo que muchas personas usan sin saber que lo hacen. RRDtool es un proyecto de código abierto muy popular para almacenar y visualizar datos de series temporales. Si alguna vez usaste Cacti, estaba basado en RRDtool. Si diseñó su propia solución, es muy probable que también haya utilizado RRDtool como backend para almacenar sus datos. Hoy en día no es tan popular como solía ser, pero entre 2000 y 2010 era la forma más común de almacenar datos de series temporales. Dato curioso:las primeras versiones de ClusterControl lo usaban.

Escala de tiempo

TimeScale es una base de datos de series temporales desarrollada sobre PostgreSQL. Es una extensión de PostgreSQL, que se basa en el almacén de datos subyacente para proporcionar acceso a los datos, lo que significa que acepta todo el SQL que desee utilizar. Al ser una extensión, utiliza todas las demás características y extensiones de PostgreSQL. Puede mezclar series temporales y otro tipo de datos, por ejemplo, para unir series temporales y metadatos, enriqueciendo la salida. También puede realizar un filtrado más avanzado utilizando JOIN y tablas que no sean de series temporales. Aprovechar la compatibilidad con GIS en PostgreSQL TimeScale se puede usar fácilmente para rastrear ubicaciones geográficas a lo largo del tiempo. También puede aprovechar todas las posibilidades de escalado que ofrece PostgreSQL, incluida la replicación.

Corriente temporal

Amazon Web Services también tiene una oferta para bases de datos de series temporales. Timestream se anunció recientemente, en noviembre de 2018. Agrega otro almacén de datos a la cartera de AWS, esta vez ayudando a los usuarios a manejar datos de series temporales provenientes de fuentes como dispositivos de Internet de las cosas o servicios monitoreados. También se puede usar para almacenar métricas derivadas de registros creados por múltiples servicios, lo que permite a los usuarios ejecutar consultas analíticas sobre ellos, lo que ayuda a comprender los patrones y las condiciones en las que funcionan los servicios.

Timestream, como la mayoría de los servicios de AWS, proporciona una manera fácil de escalar si la necesidad de almacenar y analizar los datos crece con el tiempo.

Como puedes ver, existen numerosas opciones en el mercado y esto no es de extrañar. El análisis de datos de series temporales está cobrando cada vez más fuerza recientemente, se vuelve cada vez más crítico para las operaciones comerciales. Afortunadamente, dada la gran cantidad de ofertas, tanto de código abierto como comerciales, es muy probable que pueda encontrar una herramienta que se adapte a sus necesidades.