Database
 sql >> Base de Dados >  >> RDS >> Database

Uma introdução aos bancos de dados de séries temporais


Longe vão os tempos em que “o” banco de dados era um único Sistema de Gerenciamento de Banco de Dados Relacional instalado normalmente no servidor mais poderoso do datacenter. Esse banco de dados atendeu a todos os tipos de solicitações - OLTP, OLAP, qualquer coisa que o negócio exigisse. Hoje em dia os bancos de dados rodam em hardware comum, eles também são mais sofisticados em termos de alta disponibilidade e especializados para lidar com determinado tipo de tráfego. A especialização permite que eles alcancem um desempenho muito melhor - tudo é otimizado para lidar com um determinado tipo de dados:otimizador, mecanismo de armazenamento, até mesmo a linguagem não precisa ser SQL, como costumava ser no passado. Pode ser baseado em SQL com algumas extensões que permitem uma manipulação de dados mais eficiente, ou também pode ser algo totalmente novo, criado do zero.

Hoje temos bancos de dados analíticos e colunares como ClickHouse ou MariaDB AX, temos plataformas de big data como Hadoop, soluções NoSQL como MongoDB ou Cassandra, datastores de valor-chave como Redis. Também temos bancos de dados Time-Series como Prometheus ou TimeScaleDB. É sobre isso que vamos nos concentrar neste post do blog. Bancos de dados Time-Series - o que são e por que você deseja usar outro armazenamento de dados em seu ambiente.

Para que servem os bancos de dados de série temporal?


Como o nome sugere, os bancos de dados de séries temporais são projetados para armazenar dados que mudam com o tempo. Isso pode ser qualquer tipo de dado que foi coletado ao longo do tempo. Podem ser métricas coletadas de alguns sistemas - todos os sistemas de tendências são exemplos de dados de séries temporais.

Sempre que você olha para os painéis no ClusterControl, na verdade está olhando para a representação visual dos dados de séries temporais armazenados no Prometheus, um banco de dados de séries temporais.

Os dados de série temporal não estão limitados a métricas de banco de dados. Tudo pode ser uma métrica. Como o fluxo de pessoas que entram em um shopping muda ao longo do tempo? Como o trânsito muda em uma cidade? Como o uso do transporte público muda durante o dia? Fluxo de água em um córrego ou um rio. Quantidade de energia gerada por uma usina de água. Tudo isso e tudo o mais que pode ser medido no tempo é um exemplo de dados de séries temporais. Esses dados você pode consultar, plotar, analisar para encontrar correlações entre diferentes métricas.

Como os dados são estruturados em um banco de dados de série temporal?


Como você pode imaginar, o dado mais importante no banco de dados de séries temporais é o tempo. Existem duas maneiras principais de armazenar dados. Um, algo que se assemelha ao armazenamento de valor-chave pode ser assim:
Carimbo de data e hora Métrica 1
2019-03-28 00:00:01 2356
2019-03-28 00:00:02 6874
2019-03-28 00:00:03 3245
2019-03-28 00:00:04 2340

Resumindo, para cada timestamp temos algum valor para nossa métrica.

Outro exemplo envolverá mais métricas. Em vez de armazenar cada métrica em uma tabela ou coleção separada, é possível armazenar várias métricas ao lado.
Carimbo de data e hora Métrica 1 Métrica 2 Métrica 3 Métrica 4 Métrica 5
2019-03-28 00:00:01 765 873 124 98 0
2019-03-28 00:00:02 5876 765 872 7864 634
2019-03-28 00:00:03 234 7679 98 65 34
2019-03-28 00:00:04 345 3 598 0 7345

Essa estrutura de dados ajuda a consultar os dados com mais eficiência quando as métricas estão relacionadas. Em vez de ler várias tabelas e juntá-las para reunir todas as métricas, basta ler uma única tabela e todos os dados estão prontos para serem processados ​​e apresentados.

Você pode se perguntar - o que é realmente novo aqui? Como isso difere de uma tabela regular no MySQL ou outro banco de dados relacional? Bem, o design da tabela é bastante semelhante, mas há diferenças significativas na carga de trabalho que, quando um armazenamento de dados é projetado para explorá-las, pode melhorar significativamente o desempenho.

Os dados de série temporal normalmente são apenas anexados - é bastante improvável que você esteja atualizando dados antigos. Você normalmente não exclui linhas específicas, por outro lado, você pode querer algum tipo de agregação dos dados ao longo do tempo. Isso, quando levado em consideração ao projetar os componentes internos do banco de dados, fará uma diferença significativa em relação aos bancos de dados relacionais “padrão” (e não relacionais também) destinados a servir o tipo de tráfego de processamento de transações online:o mais importante é a capacidade de armazenar consistentemente (jngest) grandes quantidades de dados que estão chegando com o tempo.

É possível usar um RDBMS para armazenar dados de séries temporais, mas o RDBMS não é otimizado para isso. Os dados e índices gerados na parte de trás podem ficar muito grandes e lentos para consultar. Os mecanismos de armazenamento usados ​​no RDBMS são projetados para armazenar uma variedade de tipos de dados diferentes. Eles geralmente são otimizados para a carga de trabalho do Processamento de Transações Online, que inclui modificação e exclusão frequente de dados. Bancos de dados relacionais também tendem a não ter funções e recursos especializados relacionados ao processamento de dados de séries temporais. Mencionamos que você provavelmente deseja agregar dados anteriores a um determinado período de tempo. Você também pode querer executar facilmente algumas funções estatísticas em seus dados de séries temporais para alisá-los, determinar e comparar tendências, interpolar dados e muito mais. Por exemplo, aqui você pode encontrar algumas das funções que o Prometheus disponibiliza aos usuários.

Exemplos de bancos de dados de séries temporais


Existem vários bancos de dados de séries temporais existentes no mercado, portanto, não é possível cobrir todos eles. Gostaríamos ainda de dar alguns exemplos de bancos de dados de séries temporais que você pode conhecer ou talvez até mesmo usado (conscientemente ou não).

InfluxDB


O InfluxDB foi criado por InfluxData. É um banco de dados de séries temporais de código aberto escrito em Go. O armazenamento de dados fornece linguagem semelhante a SQL para consultar os dados, o que facilita a integração dos desenvolvedores em seus aplicativos. O InfluxDB também funciona como parte de uma oferta comercial, que abrange toda a pilha projetada para fornecer um ambiente completo e altamente disponível para o processamento de dados de séries temporais.

Prometheus


Prometheus é outro projeto de código aberto que também é escrito em Go. É comumente usado como backend para diferentes ferramentas e projetos de código aberto, por exemplo, Percona Monitoring and Management. O Prometheus também é um banco de dados de séries temporais de escolha para o ClusterControl.

O Prometheus pode ser implantado a partir do ClusterControl para ser usado para armazenar os dados de séries temporais coletados nos servidores de banco de dados monitorados e gerenciados pelo ClusterControl:

Sendo amplamente utilizado no mundo do código aberto, o Prometheus é bastante fácil de integrar ao seu ambiente existente usando vários exportadores.

Ferramenta RRD


Este pode ser um exemplo de banco de dados de séries temporais que muitas pessoas usam sem saber que fazem isso. RRDtool é um projeto de código aberto muito popular para armazenar e visualizar dados de séries temporais. Se você já usou o Cacti, foi baseado no RRDtool. Se você projetou sua própria solução, é bem provável que também tenha usado o RRDtool como back-end para armazenar seus dados. Hoje em dia não é tão popular como costumava ser, mas em 2000 - 2010 esta era a maneira mais comum de armazenar os dados de séries temporais. Curiosidade - as primeiras versões do ClusterControl faziam uso dele.

Escala de tempo


TimeScale é um banco de dados de séries temporais desenvolvido sobre o PostgreSQL. É uma extensão do PostgreSQL, que depende do armazenamento de dados subjacente para fornecer acesso aos dados, o que significa que aceita todo o SQL que você deseja usar. Sendo uma extensão, ele utiliza todos os outros recursos e extensões do PostgreSQL. Você pode misturar séries temporais e outros tipos de dados, por exemplo, para unir séries temporais e metadados, enriquecendo a saída. Você também pode fazer uma filtragem mais avançada utilizando JOINs e tabelas sem séries temporais. Aproveitar o suporte GIS no PostgreSQL TimeScale pode ser facilmente usado no rastreamento de localizações geográficas ao longo do tempo. Ele também pode aproveitar todas as possibilidades de dimensionamento que o PostgreSQL oferece, incluindo replicação.

Fluxo de tempo


A Amazon Web Services também oferece uma oferta para bancos de dados de séries temporais. O Timestream foi anunciado recentemente, em novembro de 2018. Ele adiciona outro armazenamento de dados ao portfólio da AWS, desta vez ajudando os usuários a lidar com dados de séries temporais provenientes de fontes como dispositivos da Internet das Coisas ou serviços monitorados. Ele também pode ser usado para armazenar métricas derivadas de logs criados por vários serviços, permitindo que os usuários executem consultas analíticas sobre eles, ajudando a entender padrões e condições sob as quais os serviços funcionam.

O fluxo de tempo, como a maioria dos serviços da AWS, oferece uma maneira fácil de dimensionar caso a necessidade de armazenamento e análise de dados aumente com o tempo.

Como você pode ver, existem inúmeras opções no mercado e isso não é surpreendente. A análise de dados de séries temporais está ganhando cada vez mais força recentemente, tornando-se cada vez mais crítica para as operações de negócios. Felizmente, dado o grande número de ofertas, tanto de código aberto quanto comercial, é bastante provável que você encontre uma ferramenta que atenda às suas necessidades.