Операции с динамическими таблицами
Монтирование
При чтении или записи в таблицу клиент использует кеш метаданных, чтобы понять, какие таблеты при этом оказываются затронуты. Чтобы иметь возможность исполнять запросы, необходимо, чтобы соответствующие таблеты были смонтированы.
После создания таблет не смонтирован — находится в состоянии unmounted
. Чтобы смонтировать таблет, следует использовать команду mount-table
. Состояние задействованных таблетов сменится с unmounted
на mounting
, а затем на mounted
.
При монтировании таблета система YTsaurus выбирает таблет-селл, который будет обслуживать данный таблет. Такой селл можно указать самостоятельно в аргументах команды mount-table
или доверить выбор системе. В текущей реализации система выбирает случайный селл, находящийся в рабочем состоянии, но в будущих версиях возможны улучшения алгоритма и более точная балансировка с учётом нагрузки.
Отмонтировать таблет можно командой unmount-table
. Таблет перейдет в состояние unmounting
, а затем в unmounted
. Размонтированный таблет не может обслуживать запросы ни на запись, ни на чтение. Чтобы решардировать таблеты, нужно предварительно отмонтировать их.
Чтобы отмонтировать таблет:
- дождитесь окончания всех пишущих транзакций и не разрешайте новые;
- дождитесь записи всех данных из памяти dynamic_store в чанки chunk_store.
Отмонтирование может занять определенное время.
Можно выполнить принудительное отмонтирование (опция force
), которое работает мгновенно, но может привести к потере данных и зависанию некоторых двухфазных коммитов.
Заморозка
Помимо команд mount_table
и unmount_table
в системе YTsaurus существуют близкие аналоги: команды freeze_table
и unfreeze_table
.
Команда freeze_table
переводит таблеты таблицы — все или часть — в специальное «замороженное» состояние frozen
. Из таких таблетов можно читать данные, но в них нельзя записывать.
Команда unfreeze_table
возвращает «замороженные» таблеты обратно в обычное смонтированное состояние mounted
.
Переход из mounted
во frozen
помимо блокирования записи также вызывает запись всех накопленных в памяти данных в виде чанков на диск. Данный процесс не мгновенный и может занять минуты. В процессе записи данных на диск состояние таблета будет равно freezing
.
Заморозка динамической таблицы полезна для создания её копии, при этом таблица остаётся доступна для чтения.
Копирование динамических таблиц
В том случае, если все таблеты динамической таблицы отмонтированы или заморожены, таблицу можно скопировать как обычную статическую с помощью команды copy
. При этом копия таблицы исходно будет использовать тот же набор чанков, что и исходная. По мере того как состояние этих таблиц начнет меняться, количество общих чанков начнет сокращаться при компактификации. В пределе физически потребляемое данными таблицами место на диске станет равно сумме их объемов.