Se você tiver um cluster PostgreSQL em execução e precisar lidar com dados que mudam com o tempo (como métricas coletadas de um sistema), considere usar um banco de dados de série temporal projetado para armazenar este tipo de dados.
TimescaleDB é um banco de dados de séries temporais de código aberto otimizado para ingestão rápida e consultas complexas que suportam SQL completo. Ele é baseado no PostgreSQL e oferece o melhor dos mundos NoSQL e Relacional para dados de séries temporais.
Neste blog, veremos como habilitar manualmente o TimescaleDB em um banco de dados PostgreSQL existente e como fazer a mesma tarefa usando o ClusterControl.
Ativando o TimescaleDB manualmente
Para este blog, usaremos o CentOS 7 como sistema operacional e o PostgreSQL 11 como servidor de banco de dados.
Por padrão, você não tem TimescaleDB habilitado para PostgreSQL:
world=# \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(1 row)
Então, primeiro, você precisa adicionar o repositório correspondente para instalar o software:
$ cat /etc/yum.repos.d/timescale_timescaledb.repo
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
Vamos supor que você tenha o repositório PostgreSQL instalado, pois esta instalação do TimescaleDB exigirá dependências de lá.
O próximo passo é instalar o pacote:
$ yum install timescaledb-postgresql-11
E configure-o em seu banco de dados PostgreSQL atual. Para isso, edite seu arquivo postgresql.conf e adicione 'timescaledb' no parâmetro shared_preload_libraries:
shared_preload_libraries = 'timescaledb'
Ou se você já tiver algo adicionado lá:
shared_preload_libraries = 'pg_stat_statements,timescaledb'
Você também pode configurar max_background_workers para TimescaleDB para especificar o número máximo de trabalhadores em segundo plano.
timescaledb.max_background_workers=4
Keep in mind that this change requires a database service restart:
$ service postgresql-11 restart
E então, você terá seu TimescaleDB instalado:
postgres=# SELECT * FROM pg_available_extensions WHERE name='timescaledb';
name | default_version | installed_version | comment
-------------+-----------------+-------------------+-----------------------------------------------
--------------------
timescaledb | 1.6.0 | | Enables scalable inserts and complex queries f
or time-series data
(1 row)
Agora, você precisa habilitá-lo:
$ psql world
world=# CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \
| | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
Running version 1.6.0
For more information on TimescaleDB, please visit the following links:
1. Getting started: https://docs.timescale.com/getting-started
2. API reference documentation: https://docs.timescale.com/api
3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture
Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescaledb.com/using-timescaledb/telemetry.
CREATE EXTENSION
Concluído.
world=# \dx
List of installed extensions
Name | Version | Schema | Description
-------------+---------+------------+--------------------------------------------------------------
-----
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
timescaledb | 1.6.0 | public | Enables scalable inserts and complex queries for time-series
data
(2 rows)
Agora, vamos ver como habilitá-lo usando o ClusterControl.
Usando ClusterControl para habilitar TimescaleDB
Vamos supor que você tenha seu cluster PostgreSQL importado no ClusterControl ou mesmo implantado usando-o.
Para habilitar o TimescaleDB usando o ClusterControl, basta ir até o seu PostgreSQL Cluster Actions e clicar na opção “Enable TimescaleDB”.
Você receberá um aviso sobre a reinicialização do banco de dados. Confirme.
Você pode monitorar a tarefa na seção ClusterControl Activity.
Então você terá seu TimescaleDB pronto para uso.
Conclusão
Agora que você tem seu TimescaleDB instalado e funcionando, você pode manipular seus dados de séries temporais de uma maneira mais eficiente. Para isso, você pode criar novas tabelas ou até mesmo migrar seus dados atuais, e claro, você deve saber como utilizá-los para aproveitar esse novo conceito.