ClickHouse
e' un Columnar Database SQL, distribuito ed Open Source con ottime prestazioni
sulle attivita' OLAP (On-Line Analytical Processing).
ClickHouse e' incredibilmente veloce nell'elaborazione di query con grandi quantita' di dati...
ma e' veloce anche nei rilasci di nuove versioni con nuove funzionalita!
In questa paginetta vederemo le novita' piu' importanti del 2019.
I contenuti di questa pagina sono: Introduzione, Versioni e rilasci, Novita' 2019, Varie ed eventuali.
Il documento si riferisce alle versioni 19.X di ClickHouse ed e' ovviamente aggiornato al 2019-12-31 23:59:59 :)
ClickHouse e' un recente database colonnare Open Source (licenza Apache 2.0 dal 2016-06). ClickHouse e' molto veloce, semplice da utilizzare ed ha un'architettura estensibile.
ClickHouse memorizza i dati per colonna, quindi ogni colonna e' fisicamente
contenuta in un file differente.
Per ogni tabella e' possibile scegliere un tipo di memorizzazione
dei dati: l'Engine.
Vi sono diverse tipologie di Engine, il piu' importante e' il MergeTree
ed i suoi derivati. Con il MergeTree i dati sono ordinati per Primary Key e
viene eseguito il pruning delle query sulla partitioning key.
In fase di inserimento i dati vengono scritti velocemente in parti
e quindi uniti (merge) successivamente da un thread asincrono,
questo da il nome all'Engine.
Oltre all'organizzazione per colonne, alla compressione ed al partizionamento
ClickHouse utilizza efficienti algoritmi di calcolo parallelo.
Quando si effettua una query ClickHouse suddivide il lavoro in piu' thread
ed effettua le operazioni in memoria,
utilizzando tutte le CPU disponibili e tutta la RAM necessaria.
Questo rende incredibilmente piu' veloci le ricerche rispetto ad un DB
tradizionale sopratutto quando vanno analizzati tutti i dati
o una parte notevole di questo come avviene tipicamente per query di tipo analitico.
L'installazione si esegue con un paio di comandi e praticamente non c'e' bisogno di tuning.
L'interfaccia l'SQL rende facilmente utilizzabile ClickHouse a chiunque
ed il dialetto SQL utilizzato e' molto simile a quello di MySQL (eg. SHOW CREATE TABLE).
Le prestazioni sono eccezionali: come altri DB column-oriented ClickHouse e' migliaia di volte
piu' veloce nelle query OLAP rispetto ad un database relazionale tradizionale.
Inoltre ClickHouse non presenta la latenza tipica di molti DB NoSQL rispondendo
in modo quasi real time alle richieste.
ClickHouse puo' essere utilizzato su server singolo (e' disponibile anche come immagine Docker su container) oppure configurato in cluster su differenti nodi fisici con shards e/o repliche delle tabelle. Grazie alla particolare struttura di memorizzazione dei dati le query eseguite in cluster scalano le prestazioni in modo lineare sul numero di shard utilizzati. Le repliche sono di tipo asincrono ed aggiornate in modalita' multimaster. La replica opera a livello di singola tabella, utilizza come repository ZooKeeper ed e' indipendente dallo sharding.
Riassumendo ClickHouse trova la sua applicazione sia quando siano necessarie ottime prestazioni con query analitiche, grazie alle sue prestazioni quasi realtime, sia quando sia necessario mantenere grandi quantita' di dati, grazie alla notevole velocita' nell'ingestion ed alla compressione dei dati.
Dal 2018 e' stato introdotto un nuovo standard per la numerazione delle versioni: la prima cifra indica l'anno, la seconda la versione, i due numeri successivi sono i rilasci; viene poi indicato se la release e' stable ovvero adatta per essere utilizzata in produzione o testing ovvero ancora in test [NdA sono anche presenti rilasci prestable ed lts: long term support]. Le funzionalita' sono legate alla versione, eventuali ulteriori rilasci sono per il bug fixing. A volte e' presente qualche regressione... e' sempre opportuno provare le nuove versioni anche se sono indicate come stable.
I rilasci di ClickHouse sono molto frequenti, anche piu' di un rilascio al giorno
su GitHub!
Anche l'uscita di nuove versioni e' piuttosto frequente: piu' di una volta al mese in media.
Una descrizione dettagliata del contenuto delle versioni e' riportato nel
Changelog
che e' il riferimento piu' completo per tutte le funzionalita' presenti in ClickHouse.
Nel documento Your Server Stinks! sono riassunti i principali rilasci:
|
|
|
|
|
|
|
19 | Production | (19.1.3 2019-02) ALTER compression codec, Delta codec, CatBoost, HDFS tables, ... (19.3.3 2019-02) KILL MUTATION, toStartOfInterval(), LowCardinality, Protobuf output format, ... (19.4.0.49 2019-03) Multiple JOINS. (19.6.2.11 2019-05) TTL. (19.11.3.11 2019-07) DoubleDelta and Gorilla codecs, H3. (19.14.3.3, 2019-09) WITH FILL in ORDER BY, table constraints, ORC input format, INSERT in Kafka, _timestamp in Kafka, system.metric_log, system.text_log. Experimental: LIVE VIEW, Template format (19.15.2.2 2019-10) Tiered storage. (19.17.4.11 2019-11) Create Dictionary, full S3 integration. (19.14.8.9, 2019-12) LTS | 19.17.6.36 19.14.10.16 LTS | 2019-01 | 2019-12 | |
18 | Production | New version numbering: year+version. JOIN syntax, ... (18.1.0 2018-07) ALTER DELETE. (18.12.14 2018-09) ALTER UPDATE. | 18.16.1 | 2018-07 | 2018-12 | |
1 | Production | (1.1.54245 2017-07) pubblic release. Dictionary, distribuited DDL, HTTP interface. (1.1.54310 2017-11) custom partitioning, Kafka Engine, arithmetic with time intervals. (1.1.54337 2018-01) MySQL tables, ODBC support. (1.1.54388 2018-06) ALTER DELETE on replicated tables. | 1.1.54394 | 2017-07 | 2018-07 | |
0 | Production | Developed intitially for internal use for Yandex.Metrica, Open sourced on 2016-06 (Apache license 2.0). | 2016-06 |
Nel seguito vederemo in dettaglio come si e' evoluto ClickHouse nel 2019.
Sono molte le nuove funzionalita' introdotte nel 2019. Vediamole organizzate per argomento:
Dopo un'introduzione come funzionalita' sperimentale e' ora disponibile come funzionalita' di produzione (19.3 2019-02) la specifica LowCardinality per una colonna. Molto utile per le colonne di tipo String, consente una compressione estrema quando i valori assunti da una colonna testuale sono in numero limitato.
Per la gestione dei dati temporali la cancellazione dei dati non piu' significativi e' fondamentale. E' disponibile (19.6 2019-05) la clausola TTL che consente di definire la persistenza dei dati per una tabella/colonna.
CH ha (19.15 2019-10) la possibilita' di utilizzare dischi differenti e migrare i dati con politiche specifiche. La funzionalita' nel suo complesso viene chiamata Tiered storage e consente l'utilizzo ottimale di dischi SSD o con meccaniche tradizionali.
Il supporto dell'SQL viene via via completato in CH: sono disponibili (19.4 2019-03) i Multiple JOINS.
Una funzionalita' spesso presente sui DB Time-Series ma difficile da ottenere con l'SQL e' la presentazione di tutte le serie temporali anche in assenza di dati. In CH e' disponibile (19.14 2019-09) l'opzione WITH FILL nella clausola ORDER BY.
Sono stati introdotti (19.14 2019-09) i table constraints che consentono di controllare i dati in fase di inserimento.
Il modo piu' efficiente in CH di eseguire le star query e' quello di utilizzare il lookup sui Dictionary. I Dictionary sono disponibili da sempre ma richiedevano una configurazione manuale. E' ora disponibile (19.17 2019-11) un comando SQL apposito CREATE DICTIONARY.
Sono disponibili nuove viste di sistema [NdA nel database system] con tutti i dettagli delle esecuzioni delle query (19.14 2019-09): trace_log, metric_log. Anche il log di CH stesso puo' essere memorizzato in una tabella: text_log.
L'integrazione con MySQL, oltre che come table function
[NdA gia' presente dalla 1.1.54337 del 2018-01],
e' disponibile (19.10 2019-07) anche a livello di database.
E' possibile definire come database remoto un database MySQL
su cui ClickHouse legge e scrive i dati in modo trasparente.
Molto interessante e' la possibilita' di utilizzare
il wire protocol MySQL (19.8 2019-06) per connettersi a ClickHouse
con un client MySQL, basta impostare la porta nel file di configurazione:
<mysql_port>3307</mysql_port>
Sono sempre piu' ricche le integrazioni con DB/dati esterni: JDBC, ODBC, (19.1 2019-02) tables HDFS (il file system distribuito di Hadoop), (19.11 2019-07) H3 (il sistema di coordinate esagonali introdotte da Uber), (19.17 2019-11) full support for S3 (lo storage di Amazon), ...
Anche i formati di input/output disponibili sono sempre piu' ampi:
(19.3 2019-02) Protobuf output format, (19.4 2019-03) Parquet format, (19.14 2019-09) ORC output format.
L'integrazione con Kafka e' realizzata con la libreria librdkafka
ed e' stata piu' volte aggiornata in CH
(19.11 2019-07 update librdkafka to version 1.1.0, 19.11.7.40 2019-08 fixed regressions,
19.14 2019-09 INSERT, 19.15 2019-10 atomic changes).
Da ultimo citiamo l'integrazione con un ambiente di AI (Artificial Intelligence): (19.1 2019-02) CatBoost multiclass models evaluation.
Questo elenco e' un estratto delle funzionalita' piu' significative introdotte in ClickHouse nel 2019. L'elenco completo e' riportato nel Changelog ufficiale.
Per il prossimo anno cosa dobbiamo aspettarci?
Sicuramente alcune funzionalita' gia' previste per il 2019
ma che non sono arrivate in tempo
[NdA in particolare la versione v19.19.1.2035 che e' testing e non ancora stable]:
2020? Rimanete sintonizzati!
Altinity, la principale azienda di supporto di ClickHouse,
certifica alcune release come Altinity Stable ClickHouse
[NdA https://www.altinity.com/blog/tag/Releases].
Le versioni Altinity Stable ClickHouse del 2019 sono:
19.11.8, 19.13.7.57.
Da quest'anno ClickHouse battezza come LTS
alcune versioni
per gli utenti che vogliono eseguire un numero minore
di aggiornamenti rispetto all'installazione dell'ultima STABLE
[NdA https://repo.yandex.ru/clickhouse/rpm/lts/x86_64/].
La versione ClickHouse LTS e' la 19.14 ed in particolare sono stati rilasciati gli aggiornamenti:
19.14.10.16, 19.14.8.9.
Altri documenti utili su ClickHouse sono: Introduzione a ClickHouse, Architettura di ClickHouse, ClickHouse DBA scripts, ...
Titolo: ClickHouse 2019
Livello: Medio
Data:
31 Dicembre 2019
Versione: 1.0.0 - 31 Dicembre 2019
©
Autore: mail [AT] meo.bogliolo.name