ClickHouse Ă© um banco de dados analĂtico de cĂłdigo aberto de alto desempenho desenvolvido pela Yandex. Inicialmente, o ClickHouse foi criado para tarefas Yandex.Metrica , mas gradualmente encontrou muitos usos no Yandex e em outras empresas. Vou lhe dizer como o ClickHouse Ă© organizado internamente, com ĂȘnfase nas conseqĂŒĂȘncias da arquitetura escolhida do ponto de vista de um desenvolvedor de aplicativos.
Os seguintes tĂłpicos serĂŁo abordados:
- Como o ClickHouse armazena dados no disco e realiza uma consulta, por que esse mĂ©todo de armazenamento permite acelerar as consultas analĂticas por vĂĄrias ordens de magnitude, mas Ă© pouco adequado para cargas OLTP e valores-chave.
- Como a replicação e o sharding funcionam, como obter escala linear e o que fazer com a consistĂȘncia eventual.
- Como diagnosticar problemas em um cluster de produção ClickHouse.
VĂdeo:
A ideia do relatĂłrio Ă© bastante simples: se vocĂȘ usar alguma ferramenta ou for usĂĄ-la, Ă© aconselhĂĄvel, pelo menos em termos gerais, imaginar o que estĂĄ acontecendo lĂĄ dentro, a fim de evitar algumas decisĂ”es erradas e tomar a decisĂŁo certa. Vou tentar transmitir esse entendimento sobre o ClickHouse hoje.
Eu tenho trabalhado no ClickHouse recentemente. Antes disso, trabalhei na Yandex.Maps por vĂĄrios anos. Ele era um desenvolvedor aplicado. Trabalhei muito lĂĄ com bancos de dados, com o Postgres, por isso ainda nĂŁo estou muito infectado com o vĂrus ClickHouse, ainda me lembro do que significa ser um desenvolvedor aplicado. Mas, em princĂpio, eu jĂĄ entendo tudo muito bem.
. 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 . , , .
, .
!