Effektive Nutzung von ClickHouse. Alexey Milovidov (Yandex)



Da ClickHouse ein spezialisiertes System ist, ist es wichtig, die Besonderheiten seiner Architektur bei der Verwendung zu berücksichtigen. In diesem Vortrag wird Alexey über Beispiele für häufige Fehler bei der Verwendung von ClickHouse sprechen, die zu ineffektiver Arbeit führen können. Praktische Beispiele zeigen, wie die Wahl des einen oder anderen Datenverarbeitungsschemas die Leistung um Größenordnungen verändern kann.



:





! , ClickHouse.





-, , , ClickHouse. , . , . , , .





, , . . ClickHouse. , ClickHouse , , , . , .



- , , .



, ? . , , , , - .





, , , , inserts batches, . . inserts.



, ClickHouse insert, . .



, . , .. . 105 - . 700 . - .



MergeTree, . . – , 400 000 .



, , , 250 000 . – ClickHouse*.



* 2020 , .





, ? MergeTree 59 . 10 000 . ReplicatedMergeTree – 6 . , 2 . -, - . ? , ClickHouse . .





– . , , . , – . . , . . , , . , , . , . - .



, insert ClickHouse, memtable. log structure MergeTree, MergeTree, log’, memTable. , . 100 , 200 . .





: « ?», , - - ClickHouse.



1. . - . , Kafka. Kafka, . , , .



, Kafka – . , Kafka. , . , , . .





2. . - , . . , , , . cron, - daemon ClickHouse. , .



, , - , .





3. , . , - - daemon, . , . , , , , , ClickHouse.



kill -9 . , . , , . , .





4. . - . ClickHouse , . , http- transfer-encoding: chunked insert’. , , overhead .



ClickHouse . ClickHouse .



. , , , ClickHouse , insert. ClickHouse inserts . , . .





5. . - community – . , . , ClickHouse . open source, , , . – , GitHub, . , - .



* 2020 , KittenHouse.





6. – Buffer . , . Buffer .



, . MergeTree , buffer , . 10 000 , . , , . .



buffer . - , .





ClickHouse Kafka. – Kafka. . . Kafka .



, . community . «community », . , , .



* 2020 , RabbitMQ.





? insert values values - . , now() – . ClickHouse , . .



* , , VALUES .



, , . ClickHouse . , , . , , .



* ClickHouse write-ahead log, .





– .



, . – , , string. . .



, , , - , , ClickHouse , . - .





, IP-. . , 192.168.1.1. – UInt32*. 32 IPv4 .



-, , . , , . - .



.



IP-, . 137 . , 37 . , . . 4 .



, . - , IP- . , .



. , , , , , .





.



\1. , . , , , . ClickHouse. . .



, , . . : . , «», , , - . .



Ulnt32 250. 250 , , , -. , ClickHouse . , , . . , , , . .





, ClickHouse. Enum. Enum . , : , , , . 4 .



, . . alter table. alter table ClickHouse . Enum, . alter * , selects. alter , . . - .



* ClickHouse, ALTER .





ClickHouse – . ClickHouse , . , : MySQL, Mongo, Postgres. , http . ClickHouse , .



, join . . , . , , .



. .. . , , . . – , . MySQL.



, , hit rate 100 %. , MySQL. ClickHouse , – , , .



, – ClickHouse . . . , , . , .





, , . . – 64 .



, 64- , . , .



. , - .



. , , - , . , . .. , . , , , . , , - , .



– .





, , , . . , , ru – 2 . , , , 2 . , , .





, , , , . – . , - . , . , . , , , . . .



– , , join. join – , . , .



in place, .





- , , - .



, , . , , , .



, . ClickHouse , . , . , , RFC, , , .



. 166 . , 67 , . . . - , - , - , .



- , , . . . , .



, , 126 , 5 . 25 . 4 . . , 25 - -.



, , , - 4. - 25 . ? - . , . .





, , , , . IPv4, UInt32*. IPv6, FixedString(16), IPv6 – 128 , . . .



, IPv4 , IPv6? , . IPv4, IPv6. , IPv4 IPv6. , IPv4 , .



* ClickHouse IPv4, IPv6, , , , .





, . , - . , , ClickHouse, . - , .



, . , , , . . : 12.3. , , , . , . , . , . .



4 . , ClickHouse. ClickHouse – . , . 5 BrowserVersion, 5 . .





, , , . ClickHouse . ClickHouse - . - .



, . , 512. 512 – .





, ClickHouse, Log, . , , .



* ClickHouse LowCardinality .





. - . . , - , , MySQL 3.23.



, .



, , , .





- . , . , MyISAM . .



– , alter . . MySQL .



, , , .





ClickHouse , , -, , .



: « ClickHouse ?». , . , . . , .



, -, . , , , – . - . . . ClickHouse .





Alter ClickHouse , alter add/drop column.



, 10 10 000 , . ClickHouse – , throughput, latency, 10 .





. , .



, maintenance .



, , , - , . – StripeLog. TinyLog, .



* ClickHouse input.





– . , 5 , 6 . , . 5 , 1 000 . . , , 200 ClickHouse, . instance .





ClickHouse . instance ClickHouse . . . - , , 56 . , , 56 . 200 ClickHouse , , 10 000 . , .



, instances . - , - . instance, ClickHouse .



, TCP. , . .





, . .



, – . , 1 000 , . . . ClickHouse AggregatingMergeTree, .



, , . , , SummingMergeTree , 20 - . , .





. -, . , . – , , , . , .



? , , . . . , . ClickHouse alter . - C++. , C++.



ClickHouse, – , . ClickHouse , . , .





– . - production show processlist. , - .



, . , . url in .





– ? , . , , ru url = - . , url, . . ClickHouse .



- , , ClickHouse . , -. . , . , , .





, ClickHouse IN. , MySQL IN, , 100 - , MySQL 10 , .



– , ClickHouse, , , full scan, . . , . , .



. , , IN . . . *.



– , , . , 100 500 . , , 50 . .



* ; , .





, API. , - . - , API , - . - , .



. API, . , -. . .



ClickHouse – . . , , . .





. .



, , , ClickHouse , ClickHouse .



? pipeline . , , -. ClickHouse . , , - - . , .



. , rsync.



ClickHouse . , ZooKeeper. ZooKeeper , , , , - java-, ClickHouse – , C++, . ZooKeeper java. - , .





ClickHouse – . . , Distributed , failover. , , .





, table engines. ClickHouse – , . , , MergeTree. – , .



MergeTree , - . . , , default – 2000 . .



, . .





, . , , . Log.



– StripeLog TinyLog.



Memory , - .





ClickHouse .



. . . JOIN, , , ClickHouse Hash JOIN. , , JOIN *.



, , , inplace .



* ClickHouse merge join , , . .





, .



ClickHouse . *. . - , , , , .



* update delete batch .



, . , ReplaceMergeTree. merges. optimize table. , .



JOIN ClickHouse – .



, .



ClickHouse , select.*



* ClickHouse . , . ClickHouse – Catboost. , : « . !». .





, ClickHouse, . , . , – . - , , , , .





! ClickHouse?



.



ClickHouse. cli .



.



select’.



.



GitHub, .



.



, , .



.



. .



. . LZ4, ZSTD*. 64 1 .



* , .



?



. . , .



.



, , uniqExact , . . , uniqExact , . ? . . , , . , , ? - ? , , - .



, , . IP- . , , ClickHouse IP- . , . . uniqExact , . -.



? , user id, in, , , ?



. , , - – . , , , , , .



, ! ClickHouse! . ?



. . ?



-. MySQL, . . after, , .



. , , - . , .



, .



, , . . , . . . : -. , , , . ?



, , , C++.



C++ ?



-.



*.



* – pull request.



!



! ! , ClickHouse , . . , ClickHouse, , . , ZooKeeper . - ClickHouse, -, ?



, . , , set max_threads = 1. , . . . , , .



, ! . , ClickHouse . , , . . . ?



-, – , , . , , . , - , java, exception, . , . . , . ? – *.



* ClickHouse, " ", .



– ?



.



! ! , , . - WITH CTE?



. WITH . .



. !



! ! . , , - ?



. . , . *.



* .



- ? , ?



, deletes, updates , selects inserts.



. primary key. , , , ? , , , ?



.



. - primary key, «» , , ? , ?



.



Vielleicht ist es sinnvoll, ein Feld in den Primärschlüssel einzufügen, mit dem die Daten besser komprimiert werden, wenn sie nach diesem Feld sortiert werden. Zum Beispiel Benutzer-ID. Der Benutzer besucht beispielsweise dieselbe Site. Geben Sie in diesem Fall die Benutzer-ID und die Uhrzeit ein. Und dann werden Ihre Daten besser komprimiert. Was das Datum betrifft, können Sie das Datum nicht in den Primärschlüssel einfügen, wenn Sie wirklich keine Bereichsabfragen nach Datum haben und nie haben.



OK, vielen Dank!




All Articles