Модуль cooler | Tdb

Модуль 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 = { ... },
-- }

-- Статистика архивации спейса sessions
local sessions_stats = cooler.stats('sessions')
-- Результат:
-- {
--   primary = { ... },
--   secondary = { ... },
-- }

-- Статистика архивации спейса sessions по первичному индексу primary
local 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 = { ... },
-- }

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