Модуль cooler
Доступно с версии 3.0.0.
Модуль cooler предоставляет методы для работы с архивацией данных — переносом устаревших кортежей из спейсов memtx в
спейсы vinyl на основе времени жизни кортежей.
Модуль поддерживает:
- DDL-операции по созданию спейса vinyl;
- задание архивации в миграциях;
- просмотр состояния и статистики архивации.
Подробную информацию об архивации данных и пример ее использования можно найти в разделе Архивация данных по их времени жизни.
- cooler.init()
- cooler.is_inited()
- cooler.setup(memtx_space_name, options)
- cooler.resetup(memtx_space_name)
- cooler.set_func(memtx_space_name, expr_code)
- cooler.stats(memtx_space_name, index_name)
- cooler.info(memtx_space_name)
Инициализировать модуль. Метод вызывается по умолчанию при применении в конфигурации технологической роли roles.cooler.
Параметры: нет
Возвращает: нет
Проверить, была ли выполнена инициализация модуля.
Параметры: нет
Возвращает: true , если модуль инициализирован, иначе false
Настроить архивацию для указанного спейса 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,},})
Пересоздать архивный 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с теми же опциями и актуальным форматом.
Создать функцию-предикат для проверки условия архивации с именем <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 дня
Вернуть статистику архивации для текущего полного прохода по спейсу.
Если параметры не указаны, возвращается статистика по всем архивируемым спейсам и индексам.
Если указан только параметр 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 = ...,-- ...-- }
Вернуть информацию о параметрах архивирования для спейса.
Если параметр не указан, возвращается информация по всем архивируемым спейсам.
Если параметр 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',-- ...-- }