ClickHouse es una base de datos analítica de código abierto de alto rendimiento desarrollada por Yandex. Inicialmente, ClickHouse fue creado para tareas de Yandex.Metrica , pero gradualmente encontró muchos usos tanto en Yandex como en otras compañías. Te diré cómo ClickHouse está organizado internamente, con énfasis en las consecuencias de la arquitectura elegida desde el punto de vista de un desarrollador de aplicaciones.
Se tratarán los siguientes temas:
- Cómo ClickHouse almacena datos en el disco y realiza una consulta, por qué este método de almacenamiento le permite acelerar las consultas analíticas en varios órdenes de magnitud, pero no es adecuado para OLTP y cargas de valores clave.
- Cómo funcionan la replicación y el fragmentación, cómo lograr una escala lineal y qué hacer con la consistencia eventual.
- Cómo diagnosticar problemas en un clúster de producción ClickHouse.
Vídeo:
La idea del informe es bastante simple: si usa alguna herramienta o la va a usar, entonces es aconsejable, al menos en términos generales, imaginar lo que está sucediendo dentro para evitar algunas decisiones incorrectas y tomar la decisión correcta. Intentaré transmitir esta comprensión sobre ClickHouse hoy.
He estado trabajando en ClickHouse recientemente. Antes de eso, trabajé en Yandex.Maps durante varios años. Fue un desarrollador aplicado. Trabajé mucho allí con bases de datos, con Postgres, por lo que todavía no estoy muy infectado con el virus ClickHouse, todavía recuerdo lo que significa ser un desarrollador aplicado. Pero, en principio, ya entiendo todo bastante bien.
. ClickHouse – , , . .
. . - . . – , ClickHouse .
- - .
- .
- , .
- DNS-.
? - , . . - , , - .
, , . . . , , .
ClickHouse :
- . ? , , . ? -, . , , . , , ClickHouse, , , . . . . .
- SQL. , . , SQL , . . . SQL . . . SQL , - , . , SQL , .
- . . . , , . , , , . . , . . , .
- , , ClickHouse. , . , ClickHouse, . . - json blob, , . , .
. , ., -. , . CounterID. hits, . Referer, -. . . , 100 .
. Referer, count, count. 10 .
. ?
-, :
- , , . . . . . : ConterID, Date, Referrer. , 100. , , .
- , , , . , , . , , . , .
- . .
, , . ClickHouse :
- , . ? – , - . ? ClickHouse – . , – . overhead , . SIMD . , , , , - .
- . .
, , , . -, , . . , . . - . , , , – CounterID, Date.
, ? CounterID, Date , , . , . .
ClickHouse . -, . . , . , , , . .
, , , , . . , . , 8 192 . . , , .
, , ? , . 1234 31 . 23 . , , , . , 1235. , , . , – . - , . , 8 000 .
, , . , ClickHouse . , « », , .
? . , . . . .
? Key-Value . - , , - , . , , .
, , 100 , , , , , . , , , - .
, , , . , , ClickHouse, . . . insert , .
, , . . - . , . . . . - .
? ClickHouse . MergeTree. , LSM . . . . , . .
, . – , . ., , , . – . . . .
ClickHouse? . . ? insert , . . - .
, , - ClickHouse, , . , , 1 000 , , .
. - . . . merge.
ClickHouse . , . , M N. , , N+1.
. N+1. .
? . , , - , , , , .
ClickHouse? ( – ) 200 , . ClickHouse . 300 , , . , ClickHouse, . ClickHouse Graphite. . . , . , - . .
. ClickHouse, . .
- , . .
- , , .
- ClickHouse , , . .
ClickHouse? .
? – . - . , . local_table.
distributed ? view , . . . , . , , – . .
? select from distributed_table. distributed_table local_table. .
. , . . . - , . distributed . Distributed .
benchmark. . - . . .
. . . . , . 140 , 140 , . . . , 140- , , . .
?
, , , distributed , , , , . , , - . , .
, , distributed , .
-, , . . distributed , - .
. . , . . .
? . . , joins , , joins , , .
ClickHouse. , , . , . - , . , , . . . , .
ClickHouse - , — ReplicatedMergeTree. , .
. . , . . . . . .
:
- INSERT —
- FETCH —
- MERGE —
? . , 1 – , . ZooKeeper. . . , , ZooKeeper.
- . , - , , fetch.
merge, . . . Merge , . . , , , . . . 2 – . , , ZooKeeper, merge.
checksums. - , , . . -. , . . , , , .
CAP-, . . - , , , : , - .
ClickHouse . , , , , , , . – : , . . , . , , .
. ClickHouse? -. ZK 3- -, , , 2-. , , .
: « - ?». - ZooKeeper. , - - . , . , .
? ? , , quorum ZK, . . , , . .
: distributed_table, replicated_table . . . ClickHouse . . . N . distributed , – , . , . . - , .
consistency. - . distributed , , . .
ClickHouse?
- column-oriented , .
- – SQL .
- OLTP, . Key-Value, . , . Key-Value blob, .
- , distributed .
- , replicate .
- open source community.
! . ! . , ClickHouse . - - , ?
? , , , retry. retry, , , ClickHouse , retry. , , . ClickHouse . ?
. ZK checksums . , 100 – . - , – , . , ClickHouse .
. . 10 000 , , ?
. .
. . , , 10 000. , , , .
, .
. . , ?
, checksum. checksum , .
. . distributed replicated . , . - , - , , - ?
, . . , . -, max_parallel_replicas. ? , . , , . ClickHouse – . , . , max_parallel_replicas, , . .
?
, . , .
, !
! . , , . . 8 000 -. . - ? - ?
, . , , , , , ClickHouse .
? -, , - . , . . . . , ClickHouse, Kafka. Kafka lock, Kafka ClickHouse. .
, . . . . distributed , . , , distributed . , ?
Distributed . , , . , local_tables, , , , .
. , . - , , , , ? .
, . , , . .
. . , ?
, distributed . 500 , , . 500 . . , . 100 , . . .
!
? - , , , ?
, , , . – . . «alter table drop partition» , .
, - , . . , , . . . , . ClickHouse , CollapsingMergeTree. , . - , : – , – . - . - .
-. , , ClickHouse : « ?», .
. , , , Kafka ? . . -, .
- replicated . ? distributed .
replicated ? , , , . - ? Slave , slave?
Kafka ?
Kafka . Kafka .
Kafka ZK.
. , , Kafka . , ClickHouse .
ClickHouse , ZK .
, , quorum ZK, . quorum .
replicated , ? , . distributed , - . , . – . replicated .
. ? instants ?
, ClickHouse , max_memory_usage. , . ? . . . ClickHouse - . , ? o_direct - . ClickHouse . - ( ) . , , . , .
ClickHouse ? , . . - , , count, .
? group by . , referrers - referrers, urls. . , , , group by , .
?
.
- , ? , 32 GB ? . ., .
, . 128 GB.
instance 128 , ?
, , . , , . , . , , .
, ! ?
. , . , , . , . , . .
?
, 70 .
!
! . , ClickHouse http- . - roadmap, ?
. http, http- , JDBC- . , - . . - , Go , , , . C++ , ClickHouse, . , , . . . . , . .
! , . , Impala HDFS , . , , HDFS?
. ClickHouse . merge , . , , HDFS . , HDFS , .
. . ?
, , . . - , -, .
– HDFS *opened*, .
. . HDFS ?
. . HDFS , , .
- .
HDFS . , , .
, .
!