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
Comentários do Hacker News
Resumo dos comentários do Hacker News
Views materializadas incrementais
pg_ivmou criar uma implementação própria.Comparação com o TimescaleDB
Tabelas append-only
Evolução dos bancos de dados de séries temporais
Necessidade de armazenamento colunar
Links úteis
Entradas de log de balanceador de carga
Inovação em código aberto
Licença PostgreSQL
Design do site e UI do app