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 . , , .
, .
!