6 pontos por GN⁺ 2024-05-21 | 1 comentários | Compartilhar no WhatsApp

O que são dados de séries temporais?

  • Dados de séries temporais são uma coleção de dados em que cada ponto de dado tem um timestamp
  • Exemplos: preços de ações, dados de temperatura e disponibilidade retornados por dispositivos e sensores, dados de tráfego de sites
  • O trabalho com séries temporais geralmente inclui consultas com filtro por tempo e consultas de agregação para resumir os dados

Trabalhando com séries temporais usando PostgreSQL

  • O PostgreSQL pode lidar com todo tipo de trabalho de dados graças à sua extensibilidade e ao ecossistema de ferramentas
  • A Tembo definiu como objetivo facilitar o uso do ecossistema PostgreSQL pelos usuários
  • A maior demanda dos clientes era uma stack capaz de armazenar e processar dados de séries temporais

Componentes do pg_timeseries

  • Requisitos para armazenar e consultar dados de séries temporais com eficiência:
    • Gerenciar dados de séries temporais com facilidade
    • Lidar com alto throughput
    • Responder rapidamente a consultas por intervalo
    • Armazenar grandes volumes de dados com eficiência
    • Executar funções analíticas complexas
  • Recursos nativos do PostgreSQL:
    • particionamento nativo, vários índices, materialized views, funções de janela/analíticas
  • Extensões adicionais:
    • pg_partman: gerenciamento de partições
    • pg_cron: agendamento de tarefas
    • columnar: compressão
    • pg_ivm: materialized views incrementais
    • pg_tier: offload de longo prazo de partições antigas

pg_timeseries: a forma mais simples de gerenciar dados de séries temporais no PostgreSQL

  • O pg_timeseries combina os recursos de várias extensões para oferecer uma interface unificada
  • Para começar, é necessária uma tabela particionada por uma coluna relacionada ao tempo
    CREATE TABLE measurements (  
      metric_name text,  
      metric_value numeric,  
      metric_time timestamptz NOT NULL  
    ) PARTITION BY RANGE (metric_time);  
    
    SELECT enable_ts_table('measurements');  
    
  • Inclui várias views para fornecer informações importantes:
    SELECT table_id, table_size_bytes FROM ts_table_info;  
    SELECT * FROM ts_part_info;  
    
  • É possível configurar políticas de compressão e exclusão para as partições:
    SELECT set_ts_compression_policy('measurements', '90 days');  
    SELECT set_ts_retention_policy('measurements', '365 days');  
    
  • Também oferece funções adicionais:
    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]');  
    

Estamos apenas começando

  • São necessários muitos componentes para construir uma extensão de séries temporais para PostgreSQL
  • O plano é desenvolver isso publicamente junto com a comunidade
  • Roadmap atual:
    • Fazer offload de partições antigas para cold storage como o S3
    • Funções aproximadas para análises eficientes
    • Materialized views incrementais
    • Rollup e rolloff de partições antigas
    • Funções auxiliares analíticas adicionais
  • O roadmap completo está no README do GitHub, e a prioridade das funcionalidades será definida conforme a demanda dos usuários

Opinião do GN⁺

  • Importância dos dados de séries temporais: a importância dos dados de séries temporais está crescendo em áreas como IoT, finanças e análise web. O pg_timeseries oferece uma ferramenta para gerenciar esses dados com eficiência.
  • Extensibilidade do PostgreSQL: é possível lidar com vários tipos de trabalho de dados aproveitando as extensões do PostgreSQL. O pg_timeseries integra esses recursos para aumentar a conveniência para o usuário.
  • Colaboração com a comunidade: por ser desenvolvido como open source, ele pode incorporar o feedback da comunidade. Isso ajuda bastante na melhoria de funcionalidades e correção de bugs.
  • Produtos concorrentes: em comparação com outros bancos de dados de séries temporais, como o TimescaleDB, ele tem a vantagem de poder ser usado sem restrições de licença. No entanto, ainda é necessário avaliar comparativamente desempenho e funcionalidades.
  • Pontos a considerar na adoção: ao adotar o pg_timeseries, é preciso considerar compatibilidade com o banco de dados existente, desempenho e custo de manutenção. Além disso, como o volume de dados pode crescer rapidamente nas séries temporais, é necessário um gerenciamento de armazenamento adequado.

1 comentários

 
GN⁺ 2024-05-21
Comentários do Hacker News

Resumo dos comentários do Hacker News

  • Views materializadas incrementais

    • Views materializadas incrementais são o recurso principal, permitindo manter os dados atualizados sem perda de desempenho à medida que novos dados chegam.
    • Há curiosidade sobre usar uma implementação como pg_ivm ou criar uma implementação própria.
    • Há esperança de que algum dia IVM seja incluído no núcleo do PostgreSQL.
  • Comparação com o TimescaleDB

    • Devido às restrições de licença do TimescaleDB, não é possível usar recursos como compressão, views materializadas incrementais e armazenamento infinito.
    • Concluiu-se que, sem esses recursos, não seria possível atender às demandas dos clientes por dados de séries temporais, então foi criada diretamente uma extensão sob licença PostgreSQL.
    • Houve experiência em fragmentar um banco de dados com 500 milhões de observações usando a versão gratuita do TimescaleDB. Funcionou sem grandes problemas.
    • Seria bom ver benchmarks e comparações. Vai continuar acompanhando.
  • Tabelas append-only

    • Já passou da hora de PostgreSQL e outros bancos de dados adicionarem tabelas nativas append-only.
    • Isso não faria deles bancos de dados de séries temporais, mas ajudaria na lógica e na abordagem relacionadas à padronização.
  • Evolução dos bancos de dados de séries temporais

    • Os bancos de dados de séries temporais estão evoluindo da seguinte forma:
      • Convergência para armazenamento colunar e formatos abertos como Parquet e Arrow: InfluxDB 3.0, QuestDB
      • Adição de recursos de séries temporais sobre o PostgreSQL: Timescale, pg_timeseries
      • Plataformas de observabilidade centradas no ecossistema Prometheus: Grafana, Victoria Metrics, Chronosphere
  • Necessidade de armazenamento colunar

    • A maioria das consultas de séries temporais são consultas de agregação.
    • Para isso, faz sentido aproveitar ou construir um armazenamento colunar de primeira linha.
    • Há dúvidas sobre por que algo como ClickHouse não existe no PostgreSQL.
  • Links úteis

    • Agradecimento por ter conhecido o Trunk e o pgt.dev.
  • Entradas de log de balanceador de carga

    • Há curiosidade sobre se essa extensão seria útil para lidar com entradas de log de balanceador de carga (status, corpo da resposta, cabeçalhos etc.).
    • Um armazenamento em banco de dados colunar parece ser mais eficiente do que um banco de dados tradicional orientado a linhas.
    • Entradas de log de balanceador de carga podem ser tratadas de forma semelhante a eventos analíticos.
  • Inovação em código aberto

    • O PostgreSQL sempre foi open source e tem usado bibliotecas open source muito permissivas.
    • Houve várias extensões proprietárias e source-available, de replicação a suporte a séries temporais.
    • Agora essas extensões proprietárias estão sendo desafiadas por alternativas open source adequadas.
  • Licença PostgreSQL

    • Usar a licença PostgreSQL é uma boa decisão.
  • Design do site e UI do app

    • O design do site é bem-feito e fácil de ler.
    • A UI do app também parece excelente nas imagens de demonstração. Há vontade de experimentar.