ClickHouse是Yandex开发的高性能开源分析数据库。最初,ClickHouse是为Yandex.Metrica任务创建的,但逐渐在Yandex和其他公司中发现了许多用途。我将告诉您ClickHouse在内部的排列方式,并从应用程序开发人员的角度重点介绍所选体系结构的后果。
将涵盖以下主题:
- ClickHouse如何在磁盘上存储数据并执行查询,为什么这种存储方法可让您将分析查询速度提高几个数量级,但不适用于OLTP和键值加载。
- 如何复制和分片工作,如何实现线性扩展,以及如何最终一致性。
- 如何在ClickHouse生产群集上诊断问题。
视频:
报告的想法很简单:如果您使用某种工具或将要使用它,那么建议至少从一般意义上来讲,想像一下内部正在发生什么,以避免做出一些错误的决定并做出正确的决定。今天,我将尝试传达对ClickHouse的这种理解。
我最近一直在从事ClickHouse。在那之前,我在Yandex.Maps工作了几年。他是一名应用程序开发人员。我在那里使用Postgres进行数据库工作,所以我对ClickHouse病毒的感染还不是很严重,我仍然记得成为一名应用程序开发人员意味着什么。但是,原则上,我已经非常了解所有内容。
. 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 . , , .
, .
!