Was Sie über die ClickHouse-Architektur wissen müssen, um sie effektiv nutzen zu können. Alexey Zatelepin (2018)

ClickHouse ist eine leistungsstarke Open-Source-Analysedatenbank, die von Yandex entwickelt wurde. Ursprünglich wurde ClickHouse für Yandex.Metrica- Aufgaben erstellt , fand jedoch nach und nach viele Verwendungsmöglichkeiten sowohl in Yandex als auch in anderen Unternehmen. Ich werde Ihnen sagen, wie ClickHouse intern angeordnet ist, wobei der Schwerpunkt auf den Konsequenzen der gewählten Architektur aus Sicht eines Anwendungsentwicklers liegt.



Folgende Themen werden behandelt:



  • Wie ClickHouse Daten auf der Festplatte speichert und eine Abfrage durchfĂĽhrt, warum diese Speichermethode es Ihnen ermöglicht, analytische Abfragen um mehrere Größenordnungen zu beschleunigen, ist jedoch fĂĽr das Laden von OLTP und SchlĂĽsselwerten schlecht geeignet.
  • Wie Replikation und Sharding funktionieren, wie eine lineare Skalierung erreicht wird und was mit eventueller Konsistenz zu tun ist.
  • So diagnostizieren Sie Probleme in einem ClickHouse-Produktionscluster.




Video:





Die Idee des Berichts ist recht einfach: Wenn Sie ein Tool verwenden oder verwenden möchten, ist es ratsam, sich zumindest allgemein vorzustellen, was im Inneren vor sich geht, um falsche Entscheidungen zu vermeiden und die richtige Entscheidung zu treffen. Ich werde versuchen, dieses Verständnis über ClickHouse heute zu vermitteln.





Ich habe kĂĽrzlich an ClickHouse gearbeitet. Davor habe ich mehrere Jahre bei Yandex.Maps gearbeitet. Er war ein angewandter Entwickler. Ich habe dort viel mit Datenbanken gearbeitet, mit Postgres, daher bin ich noch nicht sehr mit dem ClickHouse-Virus infiziert. Ich erinnere mich noch daran, was es bedeutet, ein angewandter Entwickler zu sein. Aber im Prinzip verstehe ich schon alles ganz gut.





. 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