Можно чуть-чуть больше деталей если не сложно? я чувствую что где-то мои интуитивные понятия об устройстве таблицы дают сбой:
Возьмем движок MergeTree. Есть структура таблицы - ее DDL. Есть мета таблицы - где какие данные лежат, иначе говоря
system.parts.
Это верно?
Я представлял операции упрощенно примерно так:
Вся работа с
system.parts через RW lock.
Инсерт - пишем файл(ы) в папку партиции(новые парты), добавляем запись в
system.parts - движок может читать из этого парта.
Дроп партиции/партов - удаляем из
system.parts(движок перестает читать из партов), удаляем из ФС(возможно не сразу, не важно).
Мерж партов - берем n партов, мержим на ФС, в
system.parts удаляем старые парты, добавляем новый(е).
Мутация - частный случай мержа где n=1(ну, и логика фильтров/изменений).
SELECT из таблицы сначала идет в
system.parts и выбирает мн-во подходящих партов, затем читает из этих партов.