forked from kitaisreal/clickhouse-presentations
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
executable file
·397 lines (314 loc) · 17.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
<!DOCTYPE html>
<html lang="en">
<head>
<title>ClickHouse, весна 2021</title>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="shower/themes/yandex/styles/screen-16x10.css">
<style type="text/css">
p.cloud { text-align: center; line-height: 2; }
p.cloud span { color: gray; padding: 0 20px 0 20px; white-space: nowrap; }
pre { display: block; white-space: pre; background-color: #EEE; padding: 5px; }
</style>
</head>
<body class="shower list">
<header class="caption">
<h1>ClickHouse, весна 2021</h1>
</header>
<section class="slide">
<h1 style="font-size: 34pt;">ClickHouse Meetup онлайн</h1>
<p style="margin-top: 1em;">YouTube трансляция:<br/>
<a href="https://www.youtube.com/c/ClickHouseDB">https://www.youtube.com/c/ClickHouseDB</a>:<br/>
<a href="https://youtu.be/HPJOgzQkRls">https://youtu.be/HPJOgzQkRls</a></p>
<p>Telegram chat: <a href="https://telegram.me/clickhouse_ru">https://telegram.me/clickhouse_ru</a>, <a href="https://telegram.me/clickhouse_en">clickhouse_en</a></p>
<p style="margin-top: 3em;"><b>Футболки за вопросы!</b><br/><br/>Если вы задали вопрос через Zoom<br/>— напишите после мероприятия мне в Telegram в личку:<br/>
свой вопрос, размер футболки и адрес для доставки курьером.</p>
</section>
<section class="slide" id="cover">
<h1 style="margin-top: 180px; font-size: 48pt;"><span>Возможности ClickHouse, весна 2021</h1>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">В предыдущих сериях: осень/зима 2020</h2>
<p class="cloud" style="font-size: 24pt;">
<span>EXPLAIN queries</span>
<span>Compact and In-memory data parts</span>
<span>PostgreSQL wire protocol</span>
<span>LDAP authentication</span>
<span>Atomic database</span>
<span>Background data recompression</span>
<span>Column transformers</span>
<span>RabbitMQ integration</span>
<span>256 bit Decimal</span>
<span>Kerberos for Kafka and HDFS</span>
<span>Query obfuscation and normalization</span>
<span>Embedded Web UI</span>
</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Если вы пропустили...</h2>
<p>Улучшения внешних словарей — Максим Кита.</p>
<p>Родная интеграция с PostgreSQL — Ксения Сумарокова.</p>
<p>Реплицированные базы данных — Александр Токмаков.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Протокол GRPC</h2>
<p>Включите в конфиге: <code><grpc_port>9100</grpc_port></code>.</p>
<p>Доступны все возможности родного протокола:</p>
<p>
— TLS, compression, query progress,<br/>
  query cancellation, sessions, external data...</p>
<p>Пример: clickhouse-client с помощью GRPC на Python.</p>
<p><code>utils/grpc-client/clickhouse-grpc-client.py</code></p>
<p style="margin-top: 100px; font-size: 14pt; color: gray;">Разработчик — Виталий Баранов. <span style="color: green;">Доступно с версии 21.1.</span></p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Хеджированные запросы</h2>
<p>Позволяет отправить запрос на другую реплику,<br/>
если одна из реплик долго отвечает,<br/>
и выбрать из нескольких реплик самую быструю.</p>
<p>— для избавления от tail latencies на очень больших кластерах.</p>
<p style="color: gray;">Доступно с версии 21.3.</p>
<p style="font-size: 80%; margin-top: 2em; color: #888;">* Самый большой ClickHouse кластер в Яндексе — >630 серверов,<br/>но в других компаниях есть кластера намного больше.</p>
<p style="margin-top: 100px; font-size: 14pt; color: gray;">Разработчик — Павел Круглов и Николай Кочетов.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Поддержка OpenTelemetry</h2>
<p>Для трассировки ClickHouse запросов в рамках большой инфраструктуры:</p>
<p>— включено по-умолчанию;</p>
<p>— понимает HTTP заголовки opentelemetry;</p>
<p>— множество spans уже размечено внутри ClickHouse;</p>
<p>— данные записываются в <code>system.opentelemetry_log</code>;</p>
<p style="margin-top: 100px; font-size: 14pt; color: gray;">Разработчик — Александр Кузьменков. <span style="color: green;">Доступно с версии 20.11.</span></p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Форматы сжатия для импорта и экспорта</h2>
<p>Прозрачная работа со сжатыми файлами:</p>
<p>— gz, brotli;<br/>
<b style="color: green;">— xz, zstd;</b></p>
<p>Example:<br/>
<pre style="font-size: 16pt;">CREATE TABLE github_events_url
(
...
) ENGINE = URL(
'https://datasets.clickhouse.tech/github_events_v2.native.<b>xz</b>',
Native);</pre>
<p style="margin-top: 50px; font-size: 14pt; color: gray;">Разработчик — Аби Палагашвили. <span style="color: green;">Доступно с версии 21.1.</span></p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Улучшения совместимости SQL</h2>
<p>— UNION DISTINCT;</p>
<p>— REPLACE TABLE and CREATE OR REPLACE TABLE;</p>
<p>— aggregate_functions_null_for_empty;</p>
<p>— Extended CTE;</p>
<p>— Type cast for IN subquery;</p>
<p>— SHOW [CHANGED] SETTINGS;</p>
<p>— POSITION(needle IN haystack);</p>
<p>— DIV / MOD;</p>
<p>— SELECT ALL;</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">ANTLR грамматика</h2>
<p>— экспериментальная и неполная;</p>
<p>— поможет в разработке сторонних инструментов,
<br/>  работающих с ClickHouse запросами;</p>
<p>Например: подсветка синтаксиса в редакторе кода.</p>
<p style="margin-top: 100px; font-size: 14pt; color: gray;">Разработчик — Иван Лежанкин. <span style="color: green;">Доступно с версии 21.1.</span></p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Тип данных Map</h2>
<p>Example: <code>map Map(String, String)</code></p>
<p><code>SELECT map['hello']</code></p>
<p style="font-size: 14pt; color: gray;">Разработчик — Hexiaoting.</span>
<h2 style="font-size: 30pt;">Движок таблиц EmbeddedRocksDB</h2>
<p>— для key-value запросов;</p>
<p>— идеально как источник для словаря;</p>
<p style="font-size: 14pt; color: gray;">Разработчик — Sundy Li.</span>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Улучшения ALTER</h2>
<p>ALTER UPDATE / DELETE IN PARTITION:</p>
<p>— ограничение области мутаций.</p>
<p>ALTER DROP PART:</p>
<p>— теперь и для Replicated таблиц.</p>
<p>TTL теперь удаляет пустые куски:</p>
<p>— нет путаницы с оставшимися кусками.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Поиск полудубликатов текстов</h2>
<p>Анализ текстов с помощью алгоритмов Min-Hash и Sim-Hash<br/>
для поиска похожих или скопированных кусков.</p>
<p>Алгоритм <b>Min-Hash</b>:</p>
<p>1. Достаём из текста все шинглы из N идущих подряд слов.</p>
<p>2. Хэшируем шинглы!</p>
<p>3. Выбираем M хэшей с мин. значениями и столько же с макс.</p>
<p>4. Хэшируем хэши!</p>
<p style="margin-right: -10em;">5. Тексты считаются дубликатами, если хотя бы один из двух хэшей совпал.</p>
<p style="margin-top: 50px; font-size: 14pt; color: gray;">Разработчик — ucasFL. <span style="color: green;">Доступно с версии 21.1.</span></p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Статистические тесты</h2>
<p>Тесты на то, что у распределений отличаются средние,<br/>
полезно для A/B тестирования.</p>
<p>— studentTTest;</p>
<p>— welchTTest;</p>
<p>— mannWitneyUTest;</p>
<p><br/>Корреляция рангов:</p>
<p>— rankCorr.</p>
<p style="margin-top: 70px; font-size: 14pt; color: gray;">Разработчик — Никита Михайлов и другие. <span style="color: green;">Доступно с версии 21.1.</span></p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Весна/лето 2021</h2>
<p>ClickHouse Roadmap публично доступен на GitHub:</p>
<p><a href="https://github.com/ClickHouse/ClickHouse/issues/17623">https://github.com/ClickHouse/ClickHouse/issues/17623</a>
<p>Там слишком много... я расскажу только чуть-чуть.</p>
</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Основные задачи</h2>
<p class="cloud">
<span>Provide alternative for ZooKeeper</span>
<span>Nested and semistructured data</span>
<span>Limited support for transactions</span>
<span>Backups</span>
<span>Hedged requests</span>
<span>Window functions</span>
<span>Separation of storage and compute</span>
<span>Short-circuit evaluation</span>
<span>Projections</span>
<span>Lightweight DELETE/UPDATE</span>
<span>Workload management</span>
<span>User Defined Functions</span>
<span>Simplify replication</span>
<span>JOIN improvements</span>
<span>Embedded documentation</span>
<span>Pluggable auth with tokens</span>
</p>
<p class="cloud"><a href="https://github.com/ClickHouse/ClickHouse/issues/17623">https://github.com/ClickHouse/ClickHouse/issues/17623</a>
</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Window Functions</h2>
<p>В разработке. <span style="color: green;">Начальная поддержка в версии 21.1.</span></p>
<p><code>SET allow_experimental_window_functions = 1</code></p>
<p>Уже в релизе:<br/>
— OVER (PARTITION BY ... ORDER BY ...)<br/>
— aggregate functions over windows;<br/>
— WINDOW clause;
— frame specifications;
</p>
<p>В разработке:<br/>
— non-aggregate window functions (rank, etc...);<br/>
</p>
<p style="margin-top: 50px; font-size: 14pt; color: green;">Разработчик — Александр Кузьменков.</p>
</section>
<section class="slide">
<h2 style="font-size: 28pt;">Вложенные и полуструктурированные данные</h2>
<p>В разработке. <span style="color: green;">Начальная поддержка в версии 21.1.</span></p>
<p>Множественная вложенность:</p>
<pre>cart <b>Nested</b>(
item_id UInt64,
item_price Decimal(20, 5),
features <b>Nested</b>(
...))</pre>
<p><code>SELECT cart.item_id, cart.features.f1 FROM table</code></p>
<p><code>SELECT cart.* FROM table</code></p>
</p>
<p>Поддержка для вложенного JSON и Protobuf.</p>
<p style="margin-top: 25px; font-size: 14pt; color: green;">Разработчик — Антон Попов. Доступно с версии 21.1.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Проекции: <span style="color: green;">Разработчик — Amos Bird.</span></h2>
<p>Множественные представления данных в одной таблице.</p>
<p>
— разные ключи сортировки;<br/>
— подмножество столбцов;<br/>
— подмножество строк;<br/>
— предагрегации.
</p>
<p style="color: green;">В ревью.</p>
<p>Отличия от материализованных представлений:
<p>
— данные в проекциях гарантированно консистентны;<br/>
— обновляются атомарно с таблицей;<br/>
— реплицируются так же, как таблица;<br/>
— лучшие проекции автоматически выбираются для SELECT.
</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Альтернатива для ZooKeeper</h2>
<p style="color: green; margin-top: -1em;">В разработке.<br/>
— реализован сетевой протокол ZooKeeper;<br/>
— используется абстракция поверх ZooKeeper;<br/>
— реализована модель данных ZooKeeper;<br/>
— TestKeeperServer: сервер с моделью данных ZooKeeper для тестов;<br/>
— NuKeeperServer: сервер с распределённым консенсусом на RAFT;<br/>
— реализованы снапшоты, логи, восстановление после сбоя;<br/>
</p>
<p>Преимущества:<br/>
<b>— более простая эксплуатация;</b><br/>
— исправление "zxid overflow";<br/>
— исправление проблем с max packet size;<br/>
— исправление "session expired" из-за пауз GC;<br/>
— уменьшение потребления памяти;<br/>
— сжатые снапшоты и логи;<br/>
— встраивание в clickhouse-server.
</p>
<p style="margin-top: 25px; font-size: 14pt; color: gray;">Разработчик — Александр Сапин.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Short-circuit выполнение выражений</h2>
<code style="font-size: 16pt;">SELECT IF(number = 0, 0, 123 % number) FROM numbers(10)</code>
<p style="color: red;">— division by zero.</p>
<code style="font-size: 16pt;">SELECT * FROM numbers(10) WHERE number > 0 AND 10 % number > 0</code>
<p style="color: red;">— division by zero.</p>
<p>— всегда выполняются обе ветки IF, AND и OR.</p>
<pre style="font-size: 16pt;">SELECT * FROM
(
SELECT * FROM numbers(10)
WHERE number > 0
)
WHERE 10 % number > 0</pre>
<p style="color: red;">— division by zero.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">User Defined Functions</h2>
<p>Рассматриваем 5 способов реализации UDF, из них два обязательны:</p>
<p>1. UDF в виде SQL выражений.</p>
<p><pre>CREATE FUNCTION f AS x -> x + 1</pre></p>
<p>2. UDF как исполняемая программа.</p>
<p>Взаимодействие через пайпы, данные сериализуются в любом формате.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Поддержка очень частых вставок</h2>
<p>Что будет, если отправлять в ClickHouse INSERT-ы по одной строке?</p>
<p><span style="color: red;">Было: ничего хорошего.</span><br/>
— нужно было буферизировать данные самому, или пользоваться Kafka, или ставить clickhouse-bulk, kittenhouse, ...</p>
<p><span style="color: green;">Будет: всё хорошо.</span><br/>
— ClickHouse сам будет собирать данные в пачки и выполнять асинхронный INSERT.</p>
</section>
<section class="slide">
<h2 style="font-size: 30pt;">Новые версии ClickHouse</h2>
<p style="color: gray">21.4 — testing.</p>
<p style="color: gray">21.3 — prestable, LTS до 2022-03-01.</p>
<p style="color: green">21.2 — stable.</p>
<p style="color: green">21.1 — stable.</p>
<p style="color: green">20.12 — stable.</p>
<p style="color: gray">20.12 ... 20.9 — obsolete.</p>
<p style="color: green">20.8 — LTS до 2021-09-30.</p>
<p>...</p>
<p style="color: gray">20.3 — obsolete.</p>
</section>
<section class="slide">
<h2>?</h2>
<p>Публичный roadmap 2021:</p>
<p><a href="https://github.com/ClickHouse/ClickHouse/issues/17623">https://github.com/ClickHouse/ClickHouse/issues/17623</a>
</p>
</section>
<section class="slide">
<h2>.</h2>
</section>
<div class="progress"></div>
<script src="shower/shower.min.js"></script>
</body>
</html>