Descubra o TimescaleDB: O banco de dados SQL para séries temporais

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.

Imagem de exemplo de uma Hypertable de timescaledb.com

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:

add-apt-repository ppa:timescale/timescaledb-ppa
apt-get update

Após realizar a instalação do repositório, vamos instalar o pacote do TimescaleDB apropriado para a versão do PostgreSQL instalado:


apt install timescaledb-postgresql-11

Feito a instalação vamos realizar o tunning do TimescaleDB:

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:


systemctl restart postgresql

Vamos nos tornar o superusuário do PostgreSQL chamado “postgres” executando o comando:


su - postgres

Agora com o superusuário  postgres vamos nos conectar no PostgreSQL utilizando o comando:


psql

Conectado no PostgreSQL podemos criar nossa primeira database chamada de website:


CREATE database website;

Vamos nos conectar na database criada e aplicar a extensão do TimescaleDB:

 

\c website
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Agora vamos desconectar da database criada utilizando com comando:


exit

Podemos realizar um teste de conexão na database criada, executando o comando abaixo:

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:


CREATE TABLE blog (
  time        TIMESTAMPTZ       NOT NULL,
  post        TEXT              NOT NULL,
  acessos     DOUBLE PRECISION  NULL
);

Em seguida, vamos transformá-la em uma hypertable com a função create_hypertable:


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:


ALTER TABLE blog
  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:


INSERT INTO blog
  VALUES
    (NOW(), 'devops', 70, 55),
    (NOW(), 'banco de dados', 67, 60),
    (NOW(), 'monitoramento', 80, 75);

Podemos realizar consulta de dados através do comando SELECT, e visualizar as colunas com os dados que foram inseridos:


SELECT * FROM blog ORDER BY time DESC LIMIT 100;

E também podemos realizar consultas mais elaboradas, utilizando WHERE, GROUP BY e ORDER BY:


SELECT time_bucket('15 minutes', time) AS fifteen_min,
    post, COUNT(*),
    MAX(acessos) AS max_acessos,
    MAX(usuarios) AS max_usuarios
  FROM blog
  WHERE time > NOW() - interval '3 hours'
  GROUP BY fifteen_min, post
  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:


UPDATE blog SET acessos = 98, usuarios = 87
  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:


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:


DELETE FROM blog WHERE acessos< 80 OR usuarios < 60;

Realizando uma nova consulta podemos visualizar os dados que foram removidos:


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

 

Anterior Novidades em cursos da 4Linux: Entrevista com o novo líder de treinamentos
Próxima Descubra o poder do Node.js e como ele pode transformar seu desenvolvimento web

About author

Rauny Moreira
Rauny Moreira 3 posts

Rauny Moreira atua como Analista de Infraestrutura em Software Livre, estudante de Redes de Computadores pela Universidade Nove de Julho. Possui experiência em ferramentas voltadas para aplicação da cultura Devops, com ênfase em monitoramento. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux e Ferramentas de Monitoramento OpenSource, possui Certificação Zabbix 4.0 Certified Specialist.

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Guia completo: Instalação e configuração do SQL Server no Linux

O SQL server é um sistema gerenciador de banco de dados relacional, mantido pela Microsoft. Originalmente estava disponível apenas para distribuições Windows, como o Windows Server. Desde a versão do

Banco de Dados

4Linux: Líder em Implementação de Banco de Dados PostgreSQL

A 4Linux implementou um dos maiores cases mundiais de banco de dados PostgreSQL  que chegou até mesmo a ser palestrado no maior evento mundial de PostgreSQL, o PGCON. O case do Datasus também

Banco de Dados

Organize seus objetos de banco de dados com schemas PostgreSQL no Django

Que tal se você pudesse organizar seus objetos de bancos de dados (suas tabelas, views, functions, procedures etc.) em namespaces de acordo com suas respectivas funções no sistema? Neste artigo