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

Documentos relacionados
MongoDB BANCO DE DADOS NÃO RELACIONAL ORIENTADO A DOCUMENTOS BANCO DE DADOS AVANÇADOS VALÉRIA TIMES

IMPLEMENTAÇÃO DE BANCO DE DADOS

Capítulo 9: Sistemas de banco de dados

Aula 06 Sistemas Embarcados LT38C

Sharding e replicação com Citus

Flickr, shindotv/ / BASES DE DADOS. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Introdução. O que é um Banco de Dados (BD)?

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

Banco de Dados I Introdução SQL

Processamento de dados em "tempo real"

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Seminário apresentado em 29/06/2017 Disciplina: Sistemas Distribuídos Professora: Noemi Rodriguez Aluno: Ricardo Dias

Administração de Banco de Dados

Ricardo R. Lecheta. Novatec

Administração de Banco de Dados

A linguagem SQL

{ "name": "Mongo", "type": "DB", "authors": [ "João Pedro Castro", "Cristina Ciferri" ] }

Bases de Dados 2006/2007 Exame

UFG - Instituto de Informática

Introdução ao PostgreSQL

MySql. Introdução a MySQL. Andréa Garcia Trindade

Reindexação Automática em SGBDs Relacionais

MIRTH CRIANDO MENSAGENS HL7 A PARTIR DE UMA BASE DE DADOS

Testes Automatizados com Banco de Dados

BCD29008 Banco de dados

Banco de Dados II. Transações (Oracle) Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

Introdução a Banco de Dados Prof. Msc Denival A. dos Santos

Testes Automatizados e Bancos de Dados

Page 1. Prof. Constantino Jacob

Professor Leonardo Larback

SGBD. Funções Básicas de um SGBD

Jeferson Betarello DBA Brasil 1.0 abril de 2016

Sidney Cirqueira. Reestruturando um Ambiente de Banco de Dados SQL Server na Prática

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

EA975 - Laboratório de Engenharia de Software

BANCO DE DADOS II SQL Básico. COTEMIG Gerson Borges

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

ANÁLISE E PROJETO DE BANCO DE DADOS

Sistemas de Arquivos. Arquivos e Diretórios Características e Implementação Tadeu Ferreira Oliveira - tadeu.ferreira@ifrn.edu.br

SGBD. Definição. Funções básicas

[versão para impressão] Link original: comp=24763 Conhecendo o PL/SQL

DML: Conceitos Básicos INSERT UPDATE DELETE Atividade. Banco de Dados. Aula SQL (III) Bruno Neiva Moreno

Universidade Federal de Goiás Ciências da Computação Sistemas Operacionais 2

Linguagem SQL - Structured Query Language

Curso de Banco de Dados Plataforma: MS SQL Server. Change Traking MS SQL Server

Análise e otimização de queries no MySQL. Jeronimo Fagundes da Silva

Administrando SQL Server para "Não DBAs"

EA975 - Laboratório de Engenharia de Software

Oracle Database 10g: Fundamentos de SQL e PL/SQL

BANCO DE DADOS. Vinícius Pádua

Lock. Administração de Banco de Dados

Manipulação de Dados com SQL

Requisitos de Hardware - Humanus

SQL CREATE MATERIALIZED VIEW. Processamento Analítico de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. OLAP: Modelagem Multidimensional

Desenvolvendo Websites com PHP

SQL DML. Frederico D. Bortoloti

EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Linguagem SQL - Structured Query Language

A Linguagem SQL. Tecnologia de Base de Dados. MSc. Eugénio. Macumbe

2 Instalando e configurando o ambiente de desenvolvimento do Microsoft SQL Server

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 16. Escola Politécnica da Universidade de São Paulo

Banco de Dados. Maurício Edgar Stivanello

Visão & Visão Materializada. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

Revisão de Bancos de Dados

Proposta Comercial. Produto: Revenda Plesk 12.5

Fundamentos de Programação ORACLE: SQL. Prof. Walter Gima

BCD29008 Banco de dados

In-Memory Database Internals DPB304

Designing Data Intensive Applications

Linguagem de Consulta - SQL

Apis Rest Autoescaláveis

Treinamento em SQL. Índice

NoSQL Apache Cassandra para DBAs. Conceitos básicos que todo DBA deve conhecer sobre Apache Cassandra.

Oracle Comandos para Processamento de Transações

Universidade de São Paulo. Faculdade de Economia, Administração e Contabilidade Departamento de Contabilidade e Atuária EAC FEA - USP

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Sistemas de Informação

Lidando com Armazenamento de Dados

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP

Definida pelo American National Standard Institute (ANSI) em 1986

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Curso de Banco de Dados. Prof. Rone Ilídio

Modelo de armazenamento de fluxos de rede para análises de tráfego e de segurança.

TUTORIAL DE INSTAÇÃO DO WINDOWS SERVER 2008 R2

REST. Representational State Transfer. É um estilo arquitetural usado por muitas aplicações Web para estender as suas funcionalidades.

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

Oracle Database 11g: Introdução à Linguagem SQL Novo

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

Apresentação Modelo e SQL. André Luiz Montevecchi

Transcrição:

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

O que são séries temporais?

Uma série temporal é uma sequência de medições coletadas normalmente em ordem cronológica com um intervalo fixo. Mr. Wikipedia, (2004), TimeSeries

A long time ago in a galaxy far far away

Get the data!

250 Medidores 154 Grandezas (5, 15 ou 60 minutos) 2.5M/registros dia

s Not that much

TB_MEDIDOR Id Medidor Nome Serial TB_MEDIDOR_ENE Id Medidor Timestamp Energia Ativa In Energia Ativa Out Energia Reativa In Energia Reativa Out Mesmo para engenharia, qualidade, etc...

Vida em 2005 Elipse E3 Server Oracle 8i Asp.Net Clássico

Fast Forward 2015

10 anos depois

10 anos depois

200K Medidores 14 Grandezas (5 minutos) 806M/registros dia

s Considerável

Leituras a cada 6 horas: 201M

A forma atual aguenta?

Quebra em Microservices Bulk Insert Way2 PdC Validador DataIn

Repensando a forma de armazenar

Modelo original (tall storage): Timestamp Id Energia Ativa In 1/1/2005 10:00 1/1/2005 10:05 1/1/2005 10:10 Energia Ativa Out Energia Reativa In Energia Reativa Out 13 134.1 0 12.2 0 13 132.7 0 11.2 0 13 132.6 0 14.4 0

Modelo original (tall storage): The Bad: Locks com inserção paralela de grandezas Timestamp Id Energia Insert or update Ativa In Ruim para bulk insert 1/1/2005 10:00 1/1/2005 10:05 1/1/2005 10:10 Energia Ativa Out Energia Reativa In Energia Reativa Out 13 134.1 0 12.2 0 13 132.7 0 11.2 0 13 132.6 0 14.4 0

Wide Storage, por grandeza: 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

Modelo Wide The Bad: Storage, original por (tall grandeza: storage): Complexidade de inserts, queries e group by. Timestamp Id Id Day Energia 00:05 Energia 00:10 Energia 00:15 Energia Não suporta integralizações 1 1/1/2016Ativa In 0Ativadiferentes. Out 12.2 Reativa In Reativa 0 Out Ruim para bulk insert 1/1/2005 1 13 2/1/2016 134.1 0 0 11.212.2 00 10:00 1/1/2005 1 13 3/1/2016 132.7 0 0 14.411.2 00 10:05 1/1/2005 13 132.6 0 14.4 0 10:10

Tall Storage, por grandeza, por ano: 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 Tb_EnergiaAtiva_2015, Tb_EnergiaAtiva_2016

Modelo Tall Wide Storage, original por por (tall grandeza, grandeza: storage): por ano: Nossa Escolha em termos de sql: Timestamp Id Id Day Energia 00:05 Energia 00:10 Energia 00:15 Energia Simples Timestamp 1 1/1/2016Ativa In Id 0Ativa Out 12.2 ReativaValor In Reativa 0 Out Bulk 1/1/2005 Insert 10:00 sem medo 1 134.1 1/1/2005 1 13 2/1/2016 134.1 0 0 11.212.2 00 10:00 Sem locks nos inserts 1/1/2005 10:05 1 132.7 1/1/2005 Tabelas 1 auto-criadas 13 3/1/2016 132.7 0 0 14.411.2 00 10:05 Backup 1/1/2005 10:10 e restore super 1 simples 132.6 1/1/2005 13 132.6 0 14.4 0 10:10 Tamanho das tabelas controlados ($)

TB_Medidor Id Medidor Serial TB_EnergiaAtiva Id Medidor Timestamp Valor Relacionamento entre Tabelas

TB_Medidor Id Medidor Serial TB_EnergiaAtiva Id Medidor Timestamp Valor Ganho de 28.7%

Separação das Bases Sql? Dados Relacionais Séries de Dados

Restrições

Bases de Dados Analisadas

4th base mais popular* Apache License Orientada a documentos *http://db-engines.com/en/ranking

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

{ }, { } 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

Estratégia 2: Schema orientado a documentos

{ } 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 } }

db.metrics.update( { day: ISODate("2013-10-10T00:00:00.000Z"), id: 100, type: "energiaativa" }, { $set: {"values.10.01": 193 } } ) update preciso

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

Otimizações: Ter um job criando documentos vazios Definir ID como {timestamp}_{id} para range scans

Nossas impressões: Developer Friendly Instalação Simples Sharding Maduro

Base de dados feita para Séries de Dados

API - Write HTTP POST: http://localhost:8086/write?db=mydb' EneatDel,Med=102 value=632.0 1420070400 EneatDel,Med=102 value=632.0 1420070700

API - Read HTTP GET: http://localhost:8086/query?db=mydb&q= SELECT value FROM EneatDel WHERE Med=102

Regras para retenção de dados Dados Delete dados com mais de um ano

Séries contínuas 5 MIN Agrupe dados por hora 1 DIA

Nossas impressões API Simples Queries poderosas Funcionalidades específicas Sharding (free até v0.11, depois pago) Imaturo ainda (v0.11, windows)

Outras alternativas Druid SiteWhere Newts Prometheus Graphite Axibase Infiniflux KairosDB Kdb+ Yanza Riak TS OpenTSDB Blueflood Cityzen Data TempoIQ Hawkular Metrics TimeSeries.Guru

Descrição Bytes DateStart 8 DateEnd 8 Current 8 Interval 4 Valor 1 8 Valor 2 8 Valor 3 8 28 bytes N * 8 bytes 28 + (288 * 365d * 8) bytes = 821kB

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

API - Write POST: http://localhost/add/{id} { Data: 2015-01-01T00:05, Value: 100 },

Query: Id: med/12/energiaativa Inicio: 30/03/2016 Fim: 31/03/2016

Query: ache o arquivo Id: med/12/energiaativa Arquivo: c:\neutrino\db\med\12\energiaativa.ts

Query: ache o primeiro registro Pesquisa Início - Início Arquivo Intervalo Arquivo = Registros a pular

Query: ache o primeiro registro Header (28 bytes) 8B 8B 8B 8B 8B 8B 8B 8B 8B 8B 8B Registros a pular

Query: ache o número de registros (Fim início) / Intervalo Arquivo: 31/03/2016-30/01/2016 / 5min = 288

var data = new byte[registros * sizeof(double)]; var fs = new FileStream(path); fs.seek(offset); fs.readasync(data, 0, data.length); return Deserialize(data);

Nossas impressões Customizado Backup ultra simples Pouco espaço de armazenamento Pode ser incorporado a aplicação (C#) Ainda um experimento!!!

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

Conclusões Trate series de dados como series de dados.

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

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

Perguntas? André Carlucci Diretor de Tecnologia Way2.Net MVP, Intel Innovator, Intel Black Belt @andrecarlucci

Obrigado! André Carlucci Diretor de Tecnologia Way2.Net MVP, Intel Innovator, Intel Black Belt @andrecarlucci