TGViewer
дневник Бриджит Джунс (de)👩‍💻💅 дневник Бриджит Джунс (de)👩‍💻💅 @de_zametki · 435 subscribers
Post #92 3.54K
Помните разбирали шарды и реплики в ClickHouse? Так вот, сегодня у нас на обэд🍽 три базовых сущности, которые важно не путать: partitions, parts и гранулы. Делаю себе заметки и делюсь с вами✨

Partition:


Partition - это логическое (и физическое) разбиение таблицы по какому-то ключу. Чтобы его задать, мы используем при создании таблицы правило, с помощью:
PARTITION BY🪚

Например, PARTITION BY toYYYYMM(month), что означает, что данные будут храниться по месяцам - каждая партиция соответствует одному месяцу. Это про логику.

И физически каждая партиция хранится отдельно на диске.

Зачем это нужно:

• когда данные разбиты на файлики по ключевому полю, можно быстро удалять/заливать данные за конкретный период (например, DROP PARTITION🗑 не будет перебирать и фильтровать строки, он просто удалит выбранные партиции - то бишь соответствующие файлы)

• ну и запросы работают быстрее, если фильтр попадает в партицию (тогда ClickHouse не будет трогать остальные).

Чаще всего партиции делят по периодам времени📆, как было у нас в примере выше, но ключ может быть любым.

Part:


Part - это физический кусок данных, по сути - отдельный файлик.

Откуда берется?
Когда мы вставляем данные в таблицу, ClickHouse создаёт отдельный part(файлик). Потом движок MergeTree постепенно объединяет мелкие parts в более крупные (этот процесс называется merge).

👾Вот тут важный момент, в котором я раньше путалась: не понимала, почему внутри партиции может быть несколько parts, если партиция - это вроде как физическая единица. Но вот так вот - пока parts не сольются в один файл, внутри партиции может быть несколько parts.

С этим моментом, кстати, связано то, что в ClickHouse не стоит делать очень много мелких вставок (по строке, например). Потому что в таком случае придется выполнять merge слишком часто...🥲 Рекомендуется вставлять данные в ClickHouse пакетами, от 10 000 строк за раз🤝

Гранула (granule):


Гранула - это самая маленькая единица хранения в MergeTree. Это блок строк, которые ClickHouse может прочитать за раз.
Размер гранулы по умолчанию - 8192 строк (2 в 13 степени🐈). Но может быть изменен при создании таблицы (задаётся параметром).

Гранула - это логическая единица. Набор строк внутри гранулы не хранится в отдельном файле. Чтобы запомнить, где какая гранула, ClickHouse делает метки📌 и создает файл индекса, который хранит метки.

Зачем нужны гранулы:

Они позволяют эффективно работать с индексами: если фильтр не попадает в гранулу, то её можно целиком пропустить;

именно за счёт гранул достигается ускорение при чтении данных✈️

Что пригодится на практике:


• partition удобно использовать для крупных операций (удалить или перенести данные за месяц или год)🐈

• parts нужно контролировать, чтобы их не стало слишком много (иначе запросы и мёрджи замедлятся)🐈

• гранулы напрямую влияют на скорость выборки - чем лучше подобран первичный ключ, тем меньше лишних гранул будет прочитано🐈
  • ❤ 11
  • 🔥 9
  • 🤩 2
More from @de_zametki
  1. Jul 2, 2026✍️ Дорогой дневник, что я успела натворить с DataHub 1️⃣ oops!... i did incident Первой мо…
  2. Jun 29, 2026привет🙋‍♀️ Меня долго не было, и сложно написать что-то мега-полезное, потому что довольн…
  3. Nov 1, 2025🇷🇺ТОВАРИЩИ🇷🇺 Хотите узнать, до чего доводит людей рабочая суббота? 🇷🇺 Ответ в видео.…
  4. Nov 1, 2025грубо говоря, примерно так😁😁 для всех, кому картинки помогают запоминать[me]
  5. Nov 1, 2025Всем хиллоу и лёгкой рабочей субботы! У меня после отпуска улиточный темп🐌 но не сдаемся,…
  6. Oct 12, 2025напоминашка: через полчасика начнем чтения заключительной (11) главы книги "Основы инженер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →