TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

77
Armazenando Séries de Dados Temporais em Bases de Dados Alternativas André Carlucci Diretor de Tecnologia – Way2 .Net MVP, Intel Innovator, Intel Black Belt @andrecarlucci

Transcript of TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Page 1: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Armazenando Séries de Dados Temporais em Bases de Dados Alternativas

André CarlucciDiretor de Tecnologia – Way2.Net MVP, Intel Innovator, Intel Black Belt@andrecarlucci

Page 2: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 3: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Observações de valores ordenados por tempo...

Page 4: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 5: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 6: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 7: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 8: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

O que são séries temporais?

Page 9: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

“Uma série temporal é uma sequência de medições coletadas normalmente em ordem cronológica com um intervalo fixo.”

Mr. Wikipedia, (2004), TimeSeries

Page 10: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Periódica x Aperiódica

Page 11: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 12: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Get the data!

Page 13: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 14: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Coletores de dados

Oracle

Vida no passado

Publicadores

Page 15: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

200K Medidores

14 Grandezas (5 minutos)

806M/registros dia

Page 16: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

9.333/sConsiderável

Page 17: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

A forma atual aguenta?

Page 18: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Coletores Validador

Quebra em Microservices

DataIn

Bulk Insert

Page 19: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Repensando a forma de armazenar

Page 20: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 21: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

MEDIDOR_ENEId MedidorTimestampEnergia Ativa InEnergia Ativa OutEnergia Reativa InEnergia Reativa Out

MEDIDORId MedidorNomeSerial…

Mesmo para engenharia, qualidade, etc...

Page 22: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Tall storage, por bloco:

Page 23: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Modelo original (tall storage):The good:

Coleta de dados sempre em blocoConsulta eficiente caso a leitura seja em bloco

Page 24: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Modelo original (tall storage):The bad:

Locks com inserção paralela de grandezasInsert or updateRuim para bulk insert

Page 25: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Id Day 00:05 00:10 00:15…

1 1/1/2016 0 12.2 0

1 2/1/2016 0 11.2 0

1 3/1/2016 0 14.4 0

… … … … …

Wide Storage, por grandeza:

Page 26: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Id Day 00:05 00:10 00:15…

1 1/1/2016 0 12.2 0

1 2/1/2016 0 11.2 0

1 3/1/2016 0 14.4 0

… … … … …

Wide Storage, por grandeza:

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Modelo original (tall storage):The good: Inserções de muitos registros sequenciaisLeituras mais eficientesOcupa menos espaçoÍndices menoresTabelas auto-criadas

Page 27: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Id Day 00:05 00:10 00:15…

1 1/1/2016 0 12.2 0

1 2/1/2016 0 11.2 0

1 3/1/2016 0 14.4 0

… … … … …

Wide Storage, por grandeza:

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Modelo original (tall storage):The bad: Complexidade de inserts, queries e group by. Não suporta integralizações diferentes.Ruim para bulk insert.

Page 28: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Timestamp Id Valor

1/1/2005 10:00 1 134.1

1/1/2005 10:05 1 132.7

1/1/2005 10:10 1 132.6

… … …

Tall Storage, por grandeza:

Page 29: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Timestamp Id Valor

1/1/2005 10:00 1 134.1

1/1/2005 10:05 1 132.7

1/1/2005 10:10 1 132.6

… … …

Tall Storage, por grandeza, por ano:

Id Day 00:05 00:10 00:15…

1 1/1/2016 0 12.2 0

1 2/1/2016 0 11.2 0

1 3/1/2016 0 14.4 0

… … … … …

Wide Storage, por grandeza:

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Modelo original (tall storage):The good:

SimplesBulk Insert sem medoSem locks nos insertsTabelas auto-criadas

Page 30: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Timestamp Id Valor

1/1/2005 10:00 1 134.1

1/1/2005 10:05 1 132.7

1/1/2005 10:10 1 132.6

… … …

Tall Storage, por grandeza, por ano:

Id Day 00:05 00:10 00:15…

1 1/1/2016 0 12.2 0

1 2/1/2016 0 11.2 0

1 3/1/2016 0 14.4 0

… … … … …

Wide Storage, por grandeza:

Timestamp Id Energia Ativa In

Energia Ativa Out

Energia Reativa In

Energia Reativa

Out1/1/200510:00

13 134.1 0 12.2 0

1/1/200510:05

13 132.7 0 11.2 0

1/1/200510:10

13 132.6 0 14.4 0

… … … … …

Modelo original (tall storage):The bad:

Ocupa mais espaçoMais inserts

Page 31: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Controlando o tamanho das tabelas

Page 32: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

20162015

Partitioning

TB_EnergiaAtivaId MedidorTimestampValor

2014

Page 33: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

20162015

Partitioning

TB_EnergiaAtivaId MedidorTimestampValor

2014

The good:Controla o tamanho das tabelasTransparente para as aplicações

The Bad:ManutençãoCusto

Page 34: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

DIY Partitioning

TB_EnergiaAtiva_2014Id MedidorTimestampValor

TB_EnergiaAtiva_2015Id MedidorTimestampValor

TB_EnergiaAtiva_2016Id MedidorTimestampValor

Page 35: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

DIY Partitioning

TB_EnergiaAtiva_2014Id MedidorTimestampValor

TB_EnergiaAtiva_2015Id MedidorTimestampValor

TB_EnergiaAtiva_2016Id MedidorTimestampValor

The good:Controla o tamanho das tabelasBem mais baratoBackup/Restore ultra simples

The Bad:Consultas mais complexas

Page 36: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

TB_EnergiaAtivaId MedidorTimestampValor

TB_MedidorId MedidorSerial…

Relacionamento entre Tabelas

Page 37: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

28.7%Ganho de

TB_EnergiaAtivaId MedidorTimestampValor

TB_MedidorId MedidorSerial…

Page 38: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Dados Relacionais Séries de Dados

Separação das Bases

Sql?

Page 39: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Bases de Dados Não Relacionais

Page 40: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Restrições…

:’(

Page 41: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 42: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

4th base mais popular*Apache LicenseOrientada a documentos

*http://db-engines.com/en/ranking

Page 43: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Estratégia 1:Um documento por medição

Page 44: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

{timestamp: ISODate("2015-11-

10T23:05:00.000Z"),id: 100

type: "energiaAtiva", value: 12

},{ timestamp: ISODate("2015-11-10T23:10:00.000Z"), id: 100 type: "energiaAtiva",

value: 14}

somente inserts

Page 45: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Estratégia 2:Schema orientado a documentos

Page 46: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

{ day: ISODate("2015-10-10T00:00:00.000Z"), type: "energiaAtiva",

id : 100, values: {

1: { 0: 200, 1: 200, …, 12: 100 }, …, 23: { 0: 160, 1: 120, …, 12: 110 }, 24: { 0: 130, 1: 140, …, 12: 150 }

}}

Page 47: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

db.metrics.update( {

day: ISODate("2013-10-10T00:00:00.000Z"),

id: 100, type: "energiaAtiva"

}, {

$set: {"values.10.01": 193 } }) update preciso

Page 48: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Reads:

Estratégia 1: 288 reads (dia)Estratégia 2: 1 read (dia)

Page 49: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Otimizações:

Ter um job criando documentos vaziosDefinir ID como {timestamp}_{id} para range scans (usar case-sensitive left anchored regex)

Page 50: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Nossas impressões:

Developer FriendlyInstalação SimplesShardingMaduro

Page 51: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 52: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Base de dados feita para Séries de Dados

Page 53: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

API - Write

HTTP POST: http://localhost:8086/write?db=mydb'

EneatDel,Med=102 value=632.0 1420070400EneatDel,Med=102 value=632.0 1420070700…

Page 54: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

API - Read

HTTP GET: http://localhost:8086/query?db=mydb&q=

SELECT value FROM EneatDel WHERE Med=102

Page 55: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Regras para retenção de dados

Dados

Delete dados com mais de um ano

Page 56: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Séries contínuas

5 MIN

Agrupe dados por hora

1 DIA

Page 57: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Nossas impressões

API SimplesQueries poderosasFuncionalidades específicasSharding (free até v0.11, depois pago)Imaturo ainda (v1.0, windows)

Page 58: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Outras alternativas

Graphite

OpenTSDB

KairosDB

Druid

Riak TS

TempoIQ

Blueflood

Cityzen Data

Hawkular Metrics

Newts

TimeSeries.Guru

SiteWhere

Axibase

Infiniflux Yanza

Kdb+

Prometheus

Atlas

Heroic

Akumuli

Page 59: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas
Page 60: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Be the Index

Page 61: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Descrição BytesDateStart 8DateEnd 8Current 8Interval 4Valor 1 8Valor 2 8Valor 3 8… …

28 bytes

N * 8 bytes

28 + (288 * 365d * 8) bytes = 821kB

Page 62: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

API - Read

GET: http://localhost/list?{id}&{inicio}&{fim}

Page 63: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

API - Write

POST: http://localhost/add/{id} {

Data: 2015-01-01T00:05,Value: 100

},…

Page 64: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Id: med/12/energiaAtivaInicio: 30/03/2016Fim: 31/03/2016

Query:

Page 65: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Id: med/12/energiaAtiva

Query: ache o arquivo

Arquivo: c:\neutrino\db\med\12\energiaAtiva.ts

Page 66: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Query: ache o primeiro registro

PesquisaInício

InícioArquivo-

Intervalo Arquivo

Registrosa pular=

Page 67: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Query: ache o primeiro registro

Header(28 bytes) 8B 8B 8B 8B 8B 8B 8B 8B 8B…

1/1/20

16 00

:00

30/3/

2016

00:00

8B 8B …

Registros a pular

Page 68: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Query: ache o número de registros

(Fim – início) / Intervalo Arquivo:

31/03/2016 - 30/03/2016 / 5min = 288

Page 69: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

var data = new byte[registros * sizeof(double)];

var fs = new FileStream(path);

fs.Seek(offset);

fs.ReadAsync(data, 0, data.Length);

return Deserialize(data);

Page 70: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Nossas impressões

CustomizadoBackup ultra simplesPouco espaço de armazenamentoPode ser incorporado a aplicação (C#)

Ainda um experimento!!!

Page 71: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Storage

Oracle Antigo

Oracle Mongodb Influxdb Neutrino

Medidor/Ano 8 MB 3.5 MB 1.9 MB 1.3 MB 0.8 MB

200K, 14 séries 106 TB 47 TB 25 TB 17 TB 10 TB

Page 72: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Conclusões

Trate series de dados como series de dados.

Page 73: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Conclusões

Influxdb nos pareceu a melhor opção, mas há muitas incertezas ainda.

Page 74: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Conclusões

Apesar de tudo, um banco relacional continua sendo uma excelente opção, pois nem sempre a decisão é somente técnica.

Page 75: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Perguntas?

André CarlucciDiretor de Tecnologia – Way2.Net MVP, Intel Innovator, Intel Black Belt@andrecarlucci

Page 76: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Vem crescer com a gente!

Page 77: TDC2016POA | Trilha Bigdata - Armazenando séries temporais em bases de dados alternativas

Obrigado!

André CarlucciDiretor de Tecnologia – Way2.Net MVP, Intel Innovator, Intel Black Belt@andrecarlucci