ClickHouse
e' un potente Columnar Database SQL Open Source con ottime prestazioni
sulle attivita' OLAP (On-Line Analytical Processing).
In questa paginetta vediamo la clausola TTL
che e' possibile indicare nelle CREATE TABLE
e che consente di gestire in modo semplice ed ottimale la storicizzazione dei dati.
Con la TTL indicando un intervallo di tempo e' possibile specificare sia quando migrare i dati
su uno storage differente che quando cancellarli definitivamente.
La clausola TTL e' disponibile dalla versione 19.6, il formato che descriviamo in questa paginetta e' quello che consente anche la gestione dello storage e che e' disponibile dalla versione 20.1.
ClickHouse e' il recente database colonnare sviluppato da Yandex adatto alle attivita' OLAP. Con il termine OLAP (On-Line Analytical Processing) si indicano tecniche ed architetture adatte ad analizzare grandi basi dati in tempi molto brevi.
Quando si opera su grandi quantita' di dati la gestione dello spazio
e' fondamentale.
L'Engine MergeTree di ClickHouse utilizza in modo nativo il partitioning
e quindi una prima semplice ed efficiente soluzione e' quella di
utilizzare i comandi di ALTER... DROP PARTITION.
Si tratta di una modalita' molto comune presente
nella maggioranza dei database relazionali.
Nelle ultime versioni tuttavia in ClickHouse sono state inserite funzionalita'
specifiche per gestire in modo ottimale lo svecchiamento dei dati
sfruttando Storage differenti e specifiche clausole per la cancellazione.
Queste funzionalita' sono piu' tipiche dei TSDB (Time Series Database)
e rendono particolarmente efficace la gestione di grandi quantita'
di dati organizzati per data.
Vediamo subito un esempio:
L'idea e' semplice! I dati appena inseriti vanno sul volume con i dischi piu' performanti, dopo tre mesi vengono migrati su dischi piu' economici ed infine dopo un anno vengono automaticamente cancellati.
E' tutto cosi' semplice?
Si, ma bisogna configurare correttamente ClickHouse [NdA ed utilizzare le versioni piu' recenti].
E' comunque ancora valida la sintassi semplifica che effettua solo la storicizzazione dei dati (cancellazione):
Nel caso in cui non si disponga di storage differenti ovviamente la clausola TTL ha il solo scopo di effettuare la storicizzazione dei dati. Tuttavia e' consigliabile indicare comunque DELETE come nel primo esempio.
Con la configurazione di default, ClickHouse usa un path di default, su un disco di default, su un volume di default, con una policy di default:
Andiamo ad aggiungere i nuovi dischi!
Tralasciamo gli aspetti sistemistici...
per ClickHouse e' sufficiente siano directory
differenti accessibili all'utente clickhouse.
E' possibile farlo nel file config.xml ma e' in realta' consigliabile utilizzare
un file specifico (eg. storage.xml) nella directory config.d:
Con un riavvio o con il comando SYSTEM RELOAD CONFIG o in automatico sono disponibili i nuovi dischi!
A questo punto nella creazione di tabelle con TTL e' possibile indicare i volumi o i dischi di destinazione.
Le clausole TTL hanno la necessita' di una colonna di tipo Date o DateTime e della specifica
di un intervallo di tempo.
Non e' necessario che la colonna scelta sia quella di partizionamento o di SORT,
anche se sono quelle piu' utilizzate.
Intervalli piu' brevi di DAY non sono significativi per le TTL.
Le TTL possono essere definite per tabelle o per singole colonne.
Infatti in ClickHouse ogni singola colonna e' memorizzata su una struttura differente
e potrebbero essere presenti informazioni di importanza diversa nella stessa colonna.
Le TTL per colonna possono essere usate solo per cancellare i dati e non possono essere
definite sulle colonne chiave.
Per semplicita' in questa paginetta abbiamo sempre utilizzato la definizione per tabella...
Inizialmente la clausola TTL consentiva di indicare solo la cancellazione,
la gestione dello storage e' stata inserita successivamente.
In ogni caso puo' essere utilizzata per l'uno, per l'altro o per entrambe gli scopi.
Se viene modificato un TTL di una tabella con un ALTER TABLE vanno cambiate
tutte le condizioni precedentemente impostate:
ALTER TABLE big_table MODIFY
TTL timestamp + toIntervalMonth(12) to disk 'slow', timestamp + toIntervalMonth(36) DELETE;
Le indicazioni della clausola TTL non sono eseguite immediatamente ma solo
quando occore un Merge.
Dal punto di vista tecnico la cancellazione e la MOVE sono implementati in modo differente
ed utilizzano thread distinti e con timeout molto ampi (eg. un giorno).
Le cancellazioni sono a tutti gli effetti delle mutation
mentre le policy sui volumi sono semplici MOVE part:
hanno quindi un impatto differente sul carico.
Anche se non consigliabile e' comunque possibile forzare
le riorganizzazioni con comandi quali:
ALTER TABLE... MOVE PART|PARTITION... TO VOLUME|DISK... ALTER TABLE table MODIFY SETTING merge_with_ttl_timeout = 3600 OPTIMIZE TABLE table FINAL ALTER TABLE table MATERIALIZE TTL CREAT TABLE... SETTINGS storage_policy = 'custom_policy'
Le molteplici possibilita' delle policy non sono state descritte in questa breve paginetta.
La documentazione ufficiale tutti i dettagli.
La gestione automatica dello storage con le clausole TTL non e' complessa... ma va eseguita con attenzione.
La prima avvertenza: le clausole TTL cancellano per davvero e per sempre, occhio!
Ovviamente le directory assegnate al database debbono essere assegnate all'utente unix clickhouse
ed avere le permission corrette.
Il disco "default" non si puo' indicare nella configurazione dello storage:
e' quello del parametro PATH e non va modificato.
La policy di default va dichiarata e DEVE contenere anche il disco di default.
Se si commette qualche errore di configurazione...
Beh, non e' un problema: ClickHouse non parte piu'!
Si deve mettere a posto a mano "aggiustando" il contenuto
nelle directory dei dischi configurati.
La funzionalita' dei TTL e' recente e costamentemente arricchita; le principali milestone sono: (19.6 2019-05) introduzione TTL, (19.15 2019-10) Tiered storage, (20.1 2020-01) TTL move TO, (20.3 2020-03) ALTER... MATERIALIZE TTL.
Il documento Introduzione a ClickHouse
contiene una presentazione sulle funzioni di base,
il documento Architettura di ClickHouse
contiene una presentazione dell'architettura,
DBA scripts contiene alcuni dei comandi piu' utili per il DBA.
Naturalmente la fonte piu' completa di informazioni e' la
documentazione ufficiale.
Titolo: ClickHouse TTL e Storage
Livello: Avanzato
Data:
1 Aprile 2020 🐟
Versione: 1.0.0 - 1 Aprile 2020
©
Autore: mail [AT] meo.bogliolo.name