6 puntos por GN⁺ 2024-05-21 | 1 comentarios | Compartir por WhatsApp

¿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

 
GN⁺ 2024-05-21
Opiniones en Hacker News

Resumen de comentarios de Hacker News

  • Vistas materializadas incrementales

    • Las vistas materializadas incrementales son la función clave, ya que permiten mantenerse actualizadas a medida que entran datos sin degradación del rendimiento.
    • Hay curiosidad por saber si usarán una implementación como pg_ivm o si la harán por su cuenta.
    • Se espera que algún día IVM se incluya en el núcleo de PostgreSQL.
  • Comparación con TimescaleDB

    • Debido a las restricciones de licencia de TimescaleDB, no se pueden usar funciones como compresión, vistas materializadas incrementales y almacenamiento infinito.
    • Se consideró que sin esas funciones no sería posible cubrir los requisitos de datos de series temporales de los clientes, por lo que se construyó directamente una extensión con licencia PostgreSQL.
    • Hay experiencia usando la versión gratuita de TimescaleDB para fragmentar una base de datos con 500 millones de observaciones. Funcionó sin mayores problemas.
    • Sería bueno ver benchmarks y comparaciones. Seguirán observándolo.
  • Tablas append-only

    • Ya es hora de que PostgreSQL y otras bases de datos agreguen tablas nativas append-only.
    • Aunque esto no convierte a una base de datos en una de series temporales, sí ayudaría con la lógica y el enfoque relacionados con la estandarización.
  • Evolución de las bases de datos de series temporales

    • Las bases de datos de series temporales están evolucionando de la siguiente manera:
      • Convergencia hacia almacenamiento columnar y formatos abiertos como Parquet y Arrow: InfluxDB 3.0, QuestDB
      • Adición de funciones de series temporales sobre PostgreSQL: Timescale, pg_timeseries
      • Plataformas de observabilidad centradas en el ecosistema de Prometheus: Grafana, Victoria Metrics, Chronosphere
  • Necesidad de almacenamiento columnar

    • La mayoría de las consultas de series temporales son consultas de agregación.
    • Para eso, conviene aprovechar o construir un almacenamiento columnar de primer nivel.
    • Hay dudas sobre por qué PostgreSQL no tiene algo como ClickHouse.
  • Enlaces útiles

    • Agradecen haber conocido Trunk y pgt.dev.
  • Entradas de logs del balanceador de carga

    • Hay curiosidad sobre si esta extensión sería útil para procesar entradas de logs de balanceadores de carga (estado, cuerpo de respuesta, headers, etc.).
    • Parece que un almacenamiento en base de datos columnar sería más eficiente que una base de datos tradicional orientada a filas.
    • Las entradas de logs del balanceador de carga podrían considerarse similares a eventos analíticos.
  • Innovación de código abierto

    • PostgreSQL siempre ha sido de código abierto y ha usado bibliotecas open source muy permisivas.
    • Han existido varias extensiones propietarias y de código disponible, desde replicación hasta soporte de series temporales.
    • Ahora esas extensiones propietarias están siendo desplazadas por alternativas open source adecuadas.
  • Licencia de PostgreSQL

    • Usar la licencia de PostgreSQL es una buena decisión.
  • Diseño del sitio y UI de la app

    • El diseño del sitio está bien hecho y es fácil de leer.
    • La UI de la app también se ve excelente en las fotos de demostración. Hay interés en probarla.