Descubra o TimescaleDB: O banco de dados SQL para séries temporais
Hoje vamos falar um pouco sobre o TimescaleDB …
Mas afinal, o que seria esse tal de TimescaleDB?
Respondendo a pergunta acima, TimescaleDB (TSDB) é um banco de dados de código aberto desenvolvido para tornar o SQL escalável para dados de séries temporais, lançado em abril de 2017 ele foi desenvolvido a partir do banco de dados PostgreSQL (PG) fornecendo o particionamento automático e preservando o padrão do PostgreSQL, ele é implementado como uma extensão no PostgreSQL, o que significa que roda dentro do próprio PostgreSQL.
Embora existam diversas soluções escalonáveis de séries temporais, o TimescaleDB se destaca por utilizar séries temporais sobre um banco de dados SQL convencional, isso significa que você obtém o melhor que os dois mundos podem oferecer.
O TimescaleDB faz com que o banco de dados saiba quais tabelas devem ser tratadas como dados de séries temporais (com todas as otimizações necessárias), mas nada impede você de continuar utilizando SQLs para séries temporais e tabelas regulares em seu banco de dados. As aplicações nem notam a existência de uma extensão TimescaleDB sob uma interface SQL convencional.
Para você utilizar uma tabela como séries temporais (chamada de hypertable), é necessário executar o procedimento create_hypertable do TSDB. Você pode pensar em blocos como partições de tabela que são gerenciadas automaticamente. E cada pedaço possui um intervalo de tempo associado. Para cada chunks, o TSDB também configura os índices dedicados assim as aplicações podem trabalhar com intervalos de dados sem tocar nas linhas e índices que pertencem a outros.
Hypertable ou Hipertabela: É a camada de abstração e o ponto principal de interação com seus dados usados para criar as tabelas e os índices, alterando as tabelas, inserindo novos dados, selecionando os dados.
Chunks: A hypertable é automaticamente dividida em chunks, cada chunks corresponde a um intervalo de tempo específico em uma região do espaço da partição.
Hora de praticar !
Chega de enrolação, vamos ver agora na prática como instalamos o TimescaleDB, supondo que você já possua um ambiente com o PostgreSQL instalado, pois nesse cenário é necessário possuir o PostgreSQL instalado.
Nesse laboratório utilizarei o PostgreSQL 11 no Ubuntu 18.04 caso esteja utilizando uma outra distribuição consulte o procedimento no manual de instalação através do link: https://docs.timescale.com/latest/getting-started/installation.
Agora o primeiro passo precisamos adicionar o repositório oficial do TimescaleDB e em seguida realizar um update na lista de pacotes nos repositórios:
1 | add-apt-repository ppa:timescale/timescaledb-ppa |
Após realizar a instalação do repositório, vamos instalar o pacote do TimescaleDB apropriado para a versão do PostgreSQL instalado:
1 | apt install timescaledb-postgresql-11 |
Feito a instalação vamos realizar o tunning do TimescaleDB:
1 | timescaledb-tune --quiet -- yes |
O comando timescaledb-tune é uma ferramenta criada para ajustar as configurações automaticamente, essas alterações são gravadas no arquivo de configuração do PostgreSQL postgresql.conf.
Em seguida reinicie o serviço do PostgreSQL:
1 | systemctl restart postgresql |
Vamos nos tornar o superusuário do PostgreSQL chamado “postgres” executando o comando:
Agora com o superusuário postgres vamos nos conectar no PostgreSQL utilizando o comando:
Conectado no PostgreSQL podemos criar nossa primeira database chamada de website:
1 | CREATE database website; |
Vamos nos conectar na database criada e aplicar a extensão do TimescaleDB:
2 | CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE ; |
Agora vamos desconectar da database criada utilizando com comando:
Podemos realizar um teste de conexão na database criada, executando o comando abaixo:
1 | psql -U postgres -d website |
Para criarmos uma hypertable, primeiro precisamos criar uma tabela, e depois convertê-la para hypertable através da função create_hypertable.
Vamos criar uma tabela chamada blog com as colunas time, post e acessos:
2 | time TIMESTAMPTZ NOT NULL , |
4 | acessos DOUBLE PRECISION NULL |
Em seguida, vamos transformá-la em uma hypertable com a função create_hypertable:
1 | SELECT create_hypertable( 'blog' , 'time' ); |
Dessa forma estamos criando uma hypertable que será particionada por tempo usando os valores da coluna time.
Também podemos executar o comando ALTER TABLE na hypertable para adicionar novas colunas, vamos adicionar uma nova coluna chamada usuarios:
2 | ADD COLUMN usuarios DOUBLE PRECISION NULL ; |
Dessa forma o TimescaleDB realizará automaticamente essa alteração no schema para as chunks que constituem essa hypertable.
Também é possível utilizar o comando INSERT para inserir dados na hypertable, vamos popular as colunas time, post, acessos e usuarios com alguns valores:
3 | (NOW(), 'devops' , 70, 55), |
4 | (NOW(), 'banco de dados' , 67, 60), |
5 | (NOW(), 'monitoramento' , 80, 75); |
Podemos realizar consulta de dados através do comando SELECT, e visualizar as colunas com os dados que foram inseridos:
1 | SELECT * FROM blog ORDER BY time DESC LIMIT 100; |
E também podemos realizar consultas mais elaboradas, utilizando WHERE, GROUP BY e ORDER BY:
1 | SELECT time_bucket( '15 minutes' , time ) AS fifteen_min, |
3 | MAX (acessos) AS max_acessos, |
4 | MAX (usuarios) AS max_usuarios |
6 | WHERE time > NOW() - interval '3 hours' |
7 | GROUP BY fifteen_min, post |
8 | ORDER BY fifteen_min DESC , max_acessos DESC ; |
As atualizações de dados no TimescaleDB funcionam através do comando UPDATE, vamos atualizar os valores das colunas post, acessos e usuarios da tabela blog:
1 | UPDATE blog SET acessos = 98, usuarios = 87 |
2 | WHERE time = '2019-12-09 22:02:48.782754+00' AND post = 'devops' ; |
Podemos realizar uma nova consulta com comando SELECT, e visualizar as mudanças realizadas:
1 | SELECT * FROM blog ORDER BY time DESC LIMIT 100; |
Os dados podem ser excluídos de uma hypertable usando o comando DELETE, vamos remover os dados com o valor menor que 80 na coluna acessos e também menor que 60 na coluna usuarios:
1 | DELETE FROM blog WHERE acessos< 80 OR usuarios < 60; |
Realizando uma nova consulta podemos visualizar os dados que foram removidos:
1 | SELECT * FROM blog ORDER BY time DESC LIMIT 100; |
Bom pessoal, esse post foi apenas uma introdução ao recurso TimescaleDB e o início de uma série de postagens, onde nos próximos irei demonstrar como o TimescaleDB pode ser útil em ambientes de monitoramento, sendo utilizado em conjunto com o Zabbix e também com o Prometheus.
Espero que tenham gostado, até a próxima!
CURSOSCONSULTORIA CONTATO