¿Qué son los datos de series temporales?
- Los datos de series temporales son una colección de datos en la que cada punto de datos tiene una marca de tiempo
- Ejemplos: precios de acciones, datos de temperatura y disponibilidad devueltos por dispositivos y sensores, datos de tráfico de un sitio web
- Las tareas de series temporales normalmente incluyen consultas con filtros por tiempo y consultas de agregación para resumir datos
Trabajo con series temporales usando PostgreSQL
- PostgreSQL puede manejar todo tipo de trabajos de datos gracias a su escalabilidad y a las herramientas de su ecosistema
- Tembo se propuso facilitar a los usuarios el uso del ecosistema de PostgreSQL
- La mayor demanda de los clientes era una pila capaz de almacenar y procesar datos de series temporales
Componentes de pg_timeseries
- Requisitos para almacenar y consultar eficientemente datos de series temporales:
- administrar fácilmente los datos de series temporales
- manejar alto rendimiento de procesamiento
- responder rápido a consultas por rango
- almacenar grandes volúmenes de datos de forma eficiente
- ejecutar funciones analíticas complejas
- Funciones base de PostgreSQL:
- particionamiento nativo, varios índices, vistas materializadas, funciones de ventana/analíticas
- Extensiones adicionales:
- pg_partman: administración de particiones
- pg_cron: programación de tareas
- columnar: compresión
- pg_ivm: vistas materializadas incrementales
- pg_tier: descarga a largo plazo de particiones antiguas
pg_timeseries: la forma más sencilla de administrar datos de series temporales en PostgreSQL
- pg_timeseries combina funciones de varias extensiones para ofrecer una interfaz unificada
- Para comenzar, se necesita una tabla particionada por una columna relacionada con el tiempo
CREATE TABLE measurements ( metric_name text, metric_value numeric, metric_time timestamptz NOT NULL ) PARTITION BY RANGE (metric_time); SELECT enable_ts_table('measurements'); - Incluye varias vistas para proporcionar información importante:
SELECT table_id, table_size_bytes FROM ts_table_info; SELECT * FROM ts_part_info; - Se pueden configurar políticas de compresión y eliminación para las particiones:
SELECT set_ts_compression_policy('measurements', '90 days'); SELECT set_ts_retention_policy('measurements', '365 days'); - También ofrece funciones adicionales:
SELECT locf(avg(metric_value)) OVER (ORDER BY metric_time) avg_val, last(metric_name, metric_value) highest, metric_time FROM date_bin_table(NULL::measurements, '1 hour', '[2024-05-09,2024-06-07]');
Apenas estamos comenzando
- Se necesitan muchos componentes para construir una extensión de series temporales para PostgreSQL
- El plan es desarrollarla abiertamente junto con la comunidad
- Hoja de ruta actual:
- descargar particiones antiguas a almacenamiento en frío como S3
- funciones aproximadas para análisis eficientes
- vistas materializadas incrementales
- rollup y retiro de particiones antiguas
- funciones auxiliares analíticas adicionales
- La hoja de ruta completa está en el README de GitHub y la prioridad de funciones se decidirá según la demanda de los usuarios
Opinión de GN⁺
- Importancia de los datos de series temporales: la importancia de los datos de series temporales está creciendo en áreas como IoT, finanzas y analítica web. pg_timeseries ofrece una herramienta para gestionar estos datos de forma eficiente.
- Extensibilidad de PostgreSQL: se pueden manejar diversos trabajos de datos aprovechando las extensiones de PostgreSQL. pg_timeseries integra estas extensiones para mejorar la comodidad de los usuarios.
- Colaboración con la comunidad: al desarrollarse como open source, puede reflejar el feedback de la comunidad. Esto ayuda mucho a mejorar funciones y corregir errores.
- Productos competidores: comparado con otras bases de datos de series temporales como TimescaleDB, tiene la ventaja de poder usarse sin restricciones de licencia. Sin embargo, hace falta revisar y comparar rendimiento y funcionalidades.
- Consideraciones para su adopción: al adoptar pg_timeseries, hay que considerar la compatibilidad con la base de datos existente, el rendimiento y los costos de mantenimiento. Además, por la naturaleza de los datos de series temporales, el volumen de datos puede crecer rápidamente, por lo que se necesita una gestión de almacenamiento adecuada.
1 comentarios
Opiniones en Hacker News
Resumen de comentarios de Hacker News
Vistas materializadas incrementales
pg_ivmo si la harán por su cuenta.Comparación con TimescaleDB
Tablas append-only
append-only.Evolución de las bases de datos de series temporales
Necesidad de almacenamiento columnar
Enlaces útiles
Entradas de logs del balanceador de carga
Innovación de código abierto
Licencia de PostgreSQL
Diseño del sitio y UI de la app