Se disponi di un cluster PostgreSQL attivo e funzionante e devi gestire dati che cambiano nel tempo (come le metriche raccolte da un sistema), dovresti considerare l'utilizzo di un database di serie temporali progettato per memorizzare questo tipo di dati.
TimescaleDB è un database di serie temporali open source ottimizzato per l'acquisizione rapida e query complesse che supporta SQL completo. Si basa su PostgreSQL e offre il meglio dei mondi NoSQL e relazionali per i dati delle serie temporali.
In questo blog, vedremo come abilitare manualmente TimescaleDB in un database PostgreSQL esistente e come eseguire la stessa attività utilizzando ClusterControl.
Abilitazione manuale di TimescaleDB
Per questo blog, utilizzeremo CentOS 7 come sistema operativo e PostgreSQL 11 come server di database.
Per impostazione predefinita, TimescaleDB non è abilitato per PostgreSQL:
world=# \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(1 row)
Per prima cosa, devi aggiungere il repository corrispondente per installare il 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
Supponiamo che tu abbia il repository PostgreSQL in atto poiché questa installazione di TimescaleDB richiederà dipendenze da lì.
Il prossimo passo è installare il pacchetto:
$ yum install timescaledb-postgresql-11
E configuralo nel tuo attuale database PostgreSQL. Per questo, modifica il tuo file postgresql.conf e aggiungi 'timescaledb' nel parametro shared_preload_libraries:
shared_preload_libraries = 'timescaledb'
O se hai già aggiunto qualcosa lì:
shared_preload_libraries = 'pg_stat_statements,timescaledb'
Puoi anche configurare max_background_workers per TimescaleDB per specificare il numero massimo di lavoratori in background.
timescaledb.max_background_workers=4
Keep in mind that this change requires a database service restart:
$ service postgresql-11 restart
E poi, avrai installato il tuo TimescaleDB:
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)
Quindi ora devi abilitarlo:
$ 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
Fatto.
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)
Ora vediamo come abilitarlo utilizzando ClusterControl.
Utilizzo di ClusterControl per abilitare TimescaleDB
Supponiamo che il tuo cluster PostgreSQL sia importato in ClusterControl o addirittura distribuito utilizzandolo.
Per abilitare TimescaleDB utilizzando ClusterControl, devi solo andare su PostgreSQL Cluster Actions e premere sull'opzione "Abilita TimescaleDB".
Riceverai un avviso sul riavvio del database. Confermalo.
Puoi monitorare l'attività nella sezione Attività ClusterControl.
Allora avrai il tuo TimescaleDB pronto per l'uso.
Conclusione
Ora che TimescaleDB è attivo e funzionante, puoi gestire i dati delle serie temporali in modo più efficiente. Per questo, puoi creare nuove tabelle o persino migrare i tuoi dati attuali e, naturalmente, dovresti sapere come utilizzarli per sfruttare questo nuovo concetto.