184 похожих чатов

Всем привет! Вникаю в документацию кликхауза, и хотелось бы прояснить

некоторые вопросы терминологии, мб кто-то подскажет. Есть следующие термины: partition, data part, granule и data block. Поправьте, если где-то ошибаюсь. Partition - это то что регулируется PARTTION BY, каждая партиция - отдельный раздел (или файл?) на диске, ускоряет запросы (правд ли?). Data part - это то, куда данные попадают при вставке, внутри куска они отсортированы по ORDER BY, затем куски в фоне мерджатся в куски побольше. Granule - это логическое разделение data part’а, по факту засечки индекса по PRIMARY KEY, который в свою очередь чаще всего является ORDER BY’ем, при чтении мы бежим по засечкам, и вычитываем нужные нам гранулы. А вот что такое data block?

5 ответов

15 просмотров

> Partition - это то что регулируется PARTTION BY да >,каждая партиция - отдельный раздел (или файл?) на диске каждая партиция отдельный логический раздел на диске физически это префикс в названии каталогов в /var/lib/clickhouse/data/db/table/{partition_name}_{min_block}_{max_block}_{how_much_merges_applied}` > ускоряет запросы (правд ли?) правда, но слишком мелкие partition запросы наоборот замедляют. базовая рекомендация делайте PARTITION BY toYYYYMM(datetime_column) не ошибетесь > Granule - это логическое разделение data part’а, по факту засечки индекса по PRIMARY KEY, который в свою очередь чаще всего является ORDER BY’ем, при чтении мы бежим по засечкам, и вычитываем нужные нам гранулы. почти все верно, только гранула логическая величина когда берется каждая X запись из набора и значения primary key идут в mrk файл, один парт один .mrk файл внутри него в парте может быть много записей, соответсвенно размер .mrk файла растет тем больше чем больше записей в парте (но незначительно) есть еще data skip indexes - и там гранула и гранулярность означает сколько гранул из primary key будет покрывать одна структура из data skip index при чтении мы бежим по засечкам. вычитываем из mrk смещение внутри .bin и читаем из .bin ДАТА БЛОКИ, расжимаем их и внутри расжатого блока берем второе смещение из .mrk чтобы понять где начинается исходная запись и дальше отправляем это в вышестоящий конвейер на фильтрацию \ агрегацию \ сортировку > Data part - это то, куда данные попадают при вставке, внутри куска они отсортированы по ORDER BY, затем куски в фоне мерджатся в куски побольше да, все правильно понимаете, после merge двух партов увеличивается цифра в how_much_merges_applied в результирующем парте см. формат именования еще раз /var/lib/clickhouse/data/db/table/{partition_name}_{min_block}_{max_block}_{how_much_merges_applied}`

partition -- это логическое понятие. Это объединение партов. Оно вообще чисто логическое. мы просто говорим что парты 202101_1_1000_99 и 202101_2034_4560_99 принадлежат одной партиции. парты -- это как раз папки, они образуются при инсертах И мержах да Granule -- это на что указывают засечки datablock -- это понятие native протокола, это не про хранение, это "результат запроса", это кол-во строк в блоке выдачи, т.е. там идут 30 строк колонка 1, 30 строк колонка 2, 30 строк колонка 3, 65536 строк колонка 1, 65536 строк колонка 2, 65536 строк колонка 3,

Slach [altinity]
> Partition - это то что регулируется PARTTION BY ...

извините опять гранулы с гранулярностью попутал

Фёдор-Erastov Автор вопроса
Denny [Altinity]
partition -- это логическое понятие. Это объединен...

> datablock -- это понятие native протокола, это не про хранение, это "результат запроса", это кол-во строк в блоке выдачи Так всё же, это как вы говорите «результат запроса», или как описал @BloodJazMan выше, это всё-таки что-то про хранение. Очень какой-то расплывчатый термин, в доке он используется как минимум в трёх разделах, и по контексту как будто всё разное означает. Например, я так понимаю, в skip index’ах под «блоком» подразумевается опять же логическая группировка гранул, то есть первичный индекс отсекаеает гранулы, а скип индекс отсекает «блоки» гранул?

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Anyone knows how to build this widget in Flutter? I have all the assets for round stations and the road, but how can I make the my widget animate between these stations? And h...
Mohammad Zamani
9
короче я не выдержал постоянно определять структуры, чтобы возвращать массивы разных типов. Как обычно еще это делают?
Павλо 🇺🇦
7
Если у очереди установлено x-message-ttl, при получении сообщения из этой очереди, можно узнать остаток времени жизни сообщения?
Сергей
8
Подскажите как мне лучше держать websocket сединение и переодически передавать в него данные? Сначала я сделал так: for _ in 1...1000 { try? await ws.send("test") try...
Mihail Verenich
2
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
А цены чем оправданы?
Lencore
7
Карта сайта