您需要了解有关ClickHouse架构以有效使用它的知识。阿列克谢·扎特莱平(2018)

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



, .



!




All Articles