Suporte de computação de fluxo para bancos de dados de séries temporais

1. Dados de séries temporais e suas características 

Time Series Data é uma série de dados de monitoramento de indicadores gerados continuamente com base em uma frequência relativamente estável, como o índice Dow Jones dentro de um ano, a temperatura medida em diferentes momentos do dia e assim por diante. Os dados de séries temporais têm as seguintes características:

  • Invariância de dados históricos
  • disponibilidade de dados
  • Pontualidade dos dados
  • dados estruturados
  • volume de dados

 

Em segundo lugar, a estrutura básica do banco de dados de séries temporais

 

 

De acordo com as características dos dados de séries temporais, os bancos de dados de séries temporais geralmente têm as seguintes características:

  • Armazenamento de dados de alta velocidade
  • Gerenciamento do ciclo de vida dos dados
  • Processamento de fluxo de dados
  • Consulta de dados eficiente
  • Compactação de dados personalizada

 

3. Introdução à Stream Computing 

A computação de fluxo refere-se principalmente à aquisição em tempo real de dados massivos de diferentes fontes de dados e análise e processamento em tempo real para obter informações valiosas. Cenários de negócios comuns incluem resposta rápida a eventos em tempo real, alarmes em tempo real para mudanças de mercado, análise interativa de dados em tempo real, etc. A computação de fluxo geralmente inclui as seguintes funções:

1) Filtragem e conversão (filtro e mapa)

2) Funções de agregação e janela (reduzir, agregar/janela)

3) Fusão de vários fluxos de dados e correspondência de padrões (junção e detecção de padrões)

4) Do fluxo ao processamento em bloco

 

4. Suporte de banco de dados de séries temporais para computação de fluxo   

  • Caso 1: Use uma API de computação de fluxo personalizada, conforme mostrado no exemplo a seguir:

from(bucket: "mydb")  
|> range(start: -1h)  
|> filter(fn: (r) => r["_measurement"] == "mymeasurement")  
|> map(fn: (r) => ({ r with value: r.value * 2 }))  
|> filter(fn: (r) => r.value > 100)  
|> aggregateWindow(every: 1m, fn: sum, createEmpty: false)  
|> group(columns: ["location"])  
|> join(tables: {stream1: {bucket: "mydb", measurement: "stream1", start: -1h}, stream2: {bucket: "mydb", measurement: "stream2", start: -1h}}, on: ["location"])  
|> alert(name: "value_above_threshold", message: "Value is above threshold", crit: (r) => r.value > 100)  
|> to(bucket: "mydb", measurement: "output", tagColumns: ["location"])

 

  • Caso 2: Use instruções semelhantes a SQL para criar computação de fluxo e definir regras de computação de fluxo, como segue:

CREATE STREAM current_stream        
TRIGGER AT_ONCE        
INTO current_stream_output_stb AS        
SELECT             
 _wstart as start,              
 _wend as end,              
 max(current) as max_current        
 FROM meters        
 WHERE voltage <= 220        
 INTEVAL (5S) SLIDING (1s);
{{o.name}}
{{m.name}}

Acho que você gosta

Origin my.oschina.net/u/5148943/blog/8572817
Recomendado
Clasificación