
Por ser o ClickHouse um sistema especializado, é importante levar em consideração as peculiaridades de sua arquitetura ao usá-lo. Nesta palestra, Alexey falará sobre exemplos de erros comuns ao usar o ClickHouse que podem levar a um trabalho ineficaz. Exemplos práticos mostrarão como a escolha de um ou outro esquema de processamento de dados pode alterar o desempenho em ordens de magnitude.
VĂdeo:
Olá! Meu nome é Alexey, estou fazendo ClickHouse.

Em primeiro lugar, tenho pressa em lhe agradar, não vou lhe dizer hoje o que é ClickHouse. Para ser honesto, estou farto disso. Cada vez que eu digo a você o que é. E, provavelmente, todo mundo já sabe.

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

, , , , inserts batches, . . inserts.
, ClickHouse insert, . .
, . , .. . 105 - . 700 . - .
MergeTree, . . – , 400 000 .
, , , 250 000 . – ClickHouse*.

, ? 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, «» , , ? , ?
.
Talvez faça sentido colocar tal campo na chave primária, de acordo com a qual os dados serão melhor compactados se forem classificados por este campo. Por exemplo, ID do usuário. O usuário, por exemplo, vai para o mesmo site. Neste caso, coloque o id do usuário e hora. E então seus dados serão melhor compactados. Quanto à data, se você realmente não tem e nunca tem consultas de intervalo por datas, você não pode colocar a data na chave primária.
Ok, muito obrigado!