Clickhouse Flashcards

(26 cards)

1
Q

Что такое ClickHouse и зачем он нужен?

A

Колонночная СУБД для аналитики (OLAP). Очень быстро работает с миллиардами строк.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Чем ClickHouse отличается от PostgreSQL?

A

✔ ClickHouse — OLAP, PostgreSQL — OLTP.
ClickHouse хранит данные по колонкам, не поддерживает полноценные транзакции

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Типы данных, которые есть в clickhouse, но нет в postgres:

A

1) Array - полноценные массивы, могут быть вложенными, не требуют фиксированной длины, хранятся в колоночном формате.
2) Tuple - аналог кортежей
3) Nested - вложенные таблицы внутри столбца
4) LowCardinality(String) - оптимизирован для колонок с повторяющимися значениями.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Шардирование и партицирование

A

Шардирование - разбиение данных на шарды, где каждый сервер будет работать со своей группой шардов.

Партицирование - это логическое разбиение данных на одном сервере, для ускорения работы. (Мы выбираем партиции с необходимыми данными, а не все данные)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Архитектура ClickHouse

A
  • Колонко-ориентированное хранение
  • Движок MergeTree для хранения больших объемов данных
  • Поддержка репликации и шардинга
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Оптимизации для специфических задач

A
  • Использовать колоночное хранение для агрегаций
  • Применять сжатие данных
  • Правильный выбор типа таблицы (MergeTree, ReplacingMergeTree, AggregatingMergeTree)
  • Мониторинг
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Типы таблиц в CH

A

1) MergeTree - базовый тип таблиц (все остальные это расширения). Если не знаешь, что выбрать - бери ее.
2) ReplacingMergeTree - таблица, которая позволяет заменять старые записи на новые на этапе мерджа.
3) SummingMergeTree - автоматически агрегирует поля по одинаковым ключам.
4) AgregationMergeTree - используется, когда данные хранятся в виде агрегатных статистик (data-мартс)
5) CollapsingMergeTree, VersionCollapsingMergetTree - используются редко, позволяет реализовывать медленные изменения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Skip indexes

A

Пропускающие индексы. Это механизм в CH, который позволяет быстро находить необходимые данные за счет гранул и метаданных для них.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Гранулы

A

Гранула - это определенный объем данных для оптимазиции OLAP задач. Данные в ch хранятся в колонках и разбиваются на гранулы (примерно по 8200 строк). Каждая гранула имеет свои метаданые (максимальное значения, минимальное, есть ли null и т.д.)
Данный механизм позволяет пропускать большие объемы ненужных данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Типы skip indexes

A

1) minmax - хранит минимальное и максимальное значения в грануле
2) set - хранит множество уникальных значений в грануле
3) bloom_filter - позволяет ускорить поиск подстроки
4) tokenbf_v1, ngrambf_v1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Индексы и их работа в clickhouse

A

Ключевое отличие индексов в ch: индексы в ch помогают не находить точное значение, а помогают пропускать блоки данных.
1) Primary key - используется для ускорения поиска по диапазону
2) Skip indexes (minmax, set, bloom_filter)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Преимущества колоночных баз данных

A

1) Быстрые агрегатные запросы
2) Меньше IO при чтении нужных колонок
3) Эффективное сжатие

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Виды JOIN в CH и как улучшить производительность

A

Виды:
1) ANY - самый быстрый вид. Берет строку из левой и первую попавшуюся из правой, если их несколько.
2) ALL - берет все строки из правой.
3) SEMI - возвращает строки только из левой, если есть совпадение в правой.
4) ANTI - противоположность SEMI. Возвращает строки из левой, у которых нет совпадений.

Улучшение производительности:
1) Для лучшей производительности правая таблица должна быть маленькая.
2) JOIN работает быстрее при использовании словарей.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое MergeTree

A

Это основной движок, на котором строится работа CH.
В чем основная идея:
1) Таблица разбивается на партиции (по логике)
2) Сами партиции разбиваются на части (parts), которые отсортированы по первичному ключу.
3) Если parts становится слишком много, они сливаются, а старые версии удаляются.
4) Parts разбиты на гранулы (минимальный блок данных, с которым работает primary key). Гранул - это набор строк (обычно около 8200) и метаданные к этим строкам (set, bloom_filter).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Отличие столбцовых и строковых бд

A

1) Строковые направлены на OLTP и хороши для транзакций (Mysql, postgres)
2) Столбцовые направлены на OLAP-системы, хороши для аналитики и больших объемов данных.
Преимущества столбцового хранения: лучшее сжатие, быстрые выборки
Минусы: плохо работает с транзакциями и неэффективно при частом изменении данных

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Типы данных в CH

A

1) Числовые (Int, UInt, Float, Decimal)
2) Строки (String, FixedString)
3) Даты и время (Date, DateTime)
4) Массивы и сложные типы (array, map, tuple, nested, LowCordinality)
5) Специальные (enum, nullable)

17
Q

Создание таблиц в ClickHouse

A
create table t1 (
 id UInt32,
 event_time DateTime
)
engine=MergeTree
partition by toYYYYMM(event_time)
order by (event_time)
18
Q

Принципы построения схем данных в CH

A

1) Колончатая модель
2) Минимизировать join
3) Использовать денормализацию
4) Primary key
5) Партицирование
6) Сжимать данные

19
Q

Как денормализовать данные в CH

A
  • Хранить данные “широко”: дополнительные колонки вместо JOIN’ов.
  • Дублировать данные, если это ускоряет запросы.
  • Использовать материализованные представления для предобработки.
  • Хранить агрегаты рядом с данными (например, counters, sums).
  • Использовать Nested-структуры вместо отдельных таблиц.
20
Q

Первичные ключи в CH и
как лучше использовать

A

В CH первичный ключ - это ключ сортировки, а не constraint, поэтому он не гарантирует уникальность записи.
* Определяет структуру хранения данных
* Влияет на производительность чтения и мерджей
* Обычно используется на даты и время
* Должен включать поля по которым часто происходит фильтрация

21
Q

TTL

A

Time To Live - механизм, который позволяет удалять или перемещать старые данные (настраивается при создании таблы)

22
Q

Уникальные функции CH

A
  • uniq() — приближённый подсчёт уникальных
  • uniqExact() — точный подсчёт уникальных
  • sumIf(value, condition)
  • avgIf(value, condition)
  • groupArray(n)(col) — собрать массив из первых n значений
  • topK(n)(col) — топ наиболее частых значений
23
Q

Почему при подключении через Engine=PostgreSQL не работает через schem_name.table_name

A

Потому что click берет таблицы из схемы public, а вообще там отдельно можно указать схему и все будет работать

24
Q

Что такое LowCardinality?

A

«LowCardinality — это словарное кодирование столбцов с малым числом уникальных значений, которое снижает объём данных и ускоряет аналитические запросы в ClickHouse.»

25
Как узнать сколько запрос выполнялся и сколько памяти использовал?
Взять необходимые данные из system.query_log
26
Как устанавливать order by и primary key?
Лучше устанавливать на 1-2 ключевые колонки. order by - для <= primary key - для = По сути order by и primary key - это одно и то же, только при primary key не происходит сортировки. А так и в первом, и во втором случае создается sparce index (так называемый minmax), который упрощает поиск необходимых данных. Больше колонок выбирать не стоит, так как это может усложнить вставку и merge данных.