TDB Documentation portal logo
Помощь
Обновлена 30 июня 2026 г. в 07:00

Модуль cooler

Доступно с версии 3.0.0.

Модуль cooler предоставляет методы для работы с архивацией данных — переносом устаревших кортежей из спейсов memtx в спейсы vinyl на основе времени жизни кортежей. Модуль поддерживает:

  • DDL-операции по созданию спейса vinyl;
  • задание архивации в миграциях;
  • просмотр состояния и статистики архивации.

Подробную информацию об архивации данных и пример ее использования можно найти в разделе Архивация данных по их времени жизни.

cooler.init()

Инициализировать модуль. Метод вызывается по умолчанию при применении в конфигурации технологической роли roles.cooler.

Параметры: нет

Возвращает: нет

cooler.is_inited()

Проверить, была ли выполнена инициализация модуля.

Параметры: нет

Возвращает: true , если модуль инициализирован, иначе false

cooler.setup(memtx_space_name, options)

Настроить архивацию для указанного спейса memtx.

Параметры:

  • memtx_space_name (string) — имя спейса memtx;
  • options (table) — опции архивации:
    • is_cooled_fun_name (string) — имя хранимой функции-предиката для проверки условия архивации. Значение по умолчанию: <memtx_space_name>_is_cooled;

    • vinyl_space_name (string) — имя архивного спейса vinyl. Значение по умолчанию: <memtx_space_name>_cold;

    • vinyl_params (table) — параметры спейса vinyl, в частности:

      • bloom_fpr — коэффициент ложноположительного срабатывания фильтра Блума. Чем ниже значение, тем точнее фильтр, но больше потребление памяти. Значение по умолчанию: 0.05;
      • page_size — размер страницы при чтении и записи в байтах. Значение по умолчанию: 8192;
      • range_size — максимальный размер диапазона по умолчанию (в байтах);
      • run_count_per_level — максимальное количество .run-файлов на каждом уровне LSM-дерева. Чем больше значение, тем шире LSM-дерево. Значение по умолчанию: 2;
      • run_size_ratio — соотношение между размерами уровней в LSM-дереве. Чем меньше значение, тем выше LSM-дерево. Значение по умолчанию: 3.5.

      Полный список доступных параметров и их подробное описание приведены в документации Tarantool.

Возвращает: нет

Пример:

cooler.setup('user_sessions', {    is_cooled_fun_name = 'user_sessions_is_cooled',    vinyl_space_name = 'user_sessions_vinyl',    vinyl_params = {        bloom_fpr = 0.1,        page_size = 32 * 1024,        run_count_per_level = 8,        run_size_ratio = 4,    },})

cooler.resetup(memtx_space_name)

Пересоздать архивный vinyl-спейс для спейса memtx, в котором был изменен формат. При этом:

  • старый vinyl-спейс будет переименован в <vinyl_space_name>_<N>, где N — счётчик переименований, начинающийся с 1;
  • новый vinyl-спейс будет создан с актуальным форматом и теми же параметрами.

Если форматы спейсов совместимы, функция завершается ошибкой.

Параметры:

  • memtx_space_name (string) — имя спейса memtx.

Возвращает: нет

Пример:

-- Создание memtx-спейсаbox.schema.space.create('user_sessions', {    engine = 'memtx',    format = {        { name = 'id', type = 'unsigned' },        { name = 'status', type = 'string' },    }})-- Настройка архивацииcooler.setup('user_sessions', {    vinyl_space_name = 'user_sessions_vinyl',})-- Смена формата memtx-спейса (несовместимое изменение)box.space.user_sessions:format({    { name = 'id', type = 'unsigned' },    { name = 'status', type = 'string' },    { name = 'last_updated', type = 'unsigned', is_nullable = true },})-- Повторное создание vinyl-спейсаcooler.resetup('user_sessions')

В результате:

  • Спейс user_sessions_vinyl переименован в user_sessions_vinyl_1;
  • Создан новый спейс user_sessions_vinyl с теми же опциями и актуальным форматом.

cooler.set_func(memtx_space_name, expr_code)

Создать функцию-предикат для проверки условия архивации с именем <memtx_space_name>_is_cooled.

Параметры:

  • memtx_space_name (string) — имя спейса memtx;
  • expr_code (string) — строка с выражением Lua, которое возвращает true, если кортеж должен быть архивирован. Для доступа к кортежу в выражении используется переменная t.

Возвращает: нет

Пример

В примере созданы функции requests_is_cooled и events_is_cooled:

cooler.set_func('requests', "t.status == '200'")cooler.set_func('events', "t.last_updated < require('clock').time() - 172800")  — 2 дня

cooler.stats(memtx_space_name, index_name)

Вернуть статистику архивации для текущего полного прохода по спейсу. Если параметры не указаны, возвращается статистика по всем архивируемым спейсам и индексам. Если указан только параметр memtx_space_name, вернется статистика по всем индексам указанного спейса. Если указаны оба параметра, вернется статистика по конкретному индексу.

Параметры:

  • memtx_space_name (string) — имя спейса memtx;
  • index_name (string) — имя индекса, по которому выполняется архивация.

Возвращает:

  • scan_elapsed (number) — время с начала полного прохода в секундах;
  • tuples_cooled (number) — количество архивированных кортежей за текущий проход по спейсу;
  • bytes_cooled (number) — объем архивированных данных в байтах за текущий проход по спейсу;
  • tuples_scanned (number) — количество просканированных кортежей за текущий проход по спейсу;
  • bytes_scanned (number) — объем просканированных данных в байтах за текущий проход по спейсу;
  • avg_rate (number) — средняя скорость архивации (кортежи в секунду);
  • avg_bytes_rate (number) — средняя скорость архивации (байты в секунду);
  • tuples_remaining (number) — оценка оставшихся кортежей до завершения прохода;
  • eta (number) — оценка времени до завершения прохода в секундах;
  • mismatch_count (number) — количество несовпадений при проверке кортежей memtx в ходе их переноса в спейс vinyl. После переноса кортежа в спейс vinyl и до его удаления из спейса memtx эти кортежи сравниваются между собой. Если во время переноса кортеж memtx был изменен, в vinyl остаётся предыдущая версия кортежа. В этом случае значение cooler_mismatches увеличивается на 1;
  • errors_count(number) — количество ошибок, возникших во время архивации.

Пример:

-- Статистика по всем архивируемым спейсамlocal all_stats = cooler.stats()-- Результат:-- {--   sessions = {--     primary = { ... },--     secondary = { ... },--   },--   events = { ... },-- }-- Статистика архивации спейса sessionslocal sessions_stats = cooler.stats('sessions')-- Результат:-- {--   primary = { ... },--   secondary = { ... },-- }-- Статистика архивации спейса sessions по первичному индексу primarylocal sessions_primary_stats = cooler.stats('sessions', 'primary')-- Результат:-- {--   scan_elapsed = ...,--   tuples_cooled = ...,--   bytes_cooled = ...,--   ...-- }

cooler.info(memtx_space_name)

Вернуть информацию о параметрах архивирования для спейса. Если параметр не указан, возвращается информация по всем архивируемым спейсам. Если параметр memtx_space_name указан, вернется информация по указанному спейсу.

Параметры:

  • memtx_space_name (string) — имя спейса memtx;

Возвращает:

  • memtx_space (string) — имя спейса memtx;
  • memtx_tuples_count (number) — количество кортежей в спейсе memtx;
  • vinyl_space (string) — имя спейса vinyl;
  • vinyl_params (table) — параметры спейса vinyl (см. параметры в cooler.setup(memtx_space_name, options)). Полный список доступных параметров vinyl и их подробное описание приведены в документации Tarantool;
  • vinyl_tuples_count (number) — количество кортежей в спейсе vinyl;
  • vinyl_bytes_count (number) — размер спейса vinyl в байтах;
  • is_cooled_fun (string) — имя функции-предиката для проверки условия архивации;
  • cooling_indexes (table) — имена индексов, по которым выполняется архивация;
  • resetup_count (number) — количество вызовов метода cooler.resetup() для спейса.

Пример:

-- Информация по всем архивируемым спейсамlocal all_info = cooler.info()-- Результат:-- {--   sessions = { ... },--   events = { ... },-- }-- Информация по архивации спейса sessionslocal sessions_info = cooler.info('sessions')-- Результат:-- {--   memtx_space = 'sessions',--   memtx_tuples_count = 100,--   vinyl_space = 'sessions_cold',--   ...-- }