Проверка устаревших кортежей с помощью универсальной функции¶
Доступно с версии 1.2.0.
В этом руководстве описано, как включить роль expirationd
и настроить параметры устаревания данных в конфигурации,
чтобы удалять из спейсов все кортежи, которые старше заданного времени.
В отличие от примера expirationd, здесь для проверки и обработки устаревших кортежей во всех спейсах используется одна универсальная функция is_tuple_expired
.
Подробнее о модуле expirationd
можно узнать в разделе Устаревание данных.
Руководство включает следующие шаги:
Пререквизиты¶
Для выполнения примера требуются:
установленный Docker-образ Tarantool DB;
приложение Docker compose;
утилита TT CLI;
исходные файлы примера
expirationd_universal_func
.Примечание
Есть два способа получить исходные файлы примера:
Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива:
tarantooldb-documentation-1.0.0.tar.gz
. Примерexpirationd_universal_func
расположен в таком архиве в директории./doc/examples/expirationd_universal_func/
.Отдельный архив expirationd_universal_func.tar.gz, скачанный c сайта Tarantool.
Запуск кластера¶
Для успешного запуска кластера должны быть свободны следующие порты:
3300 .. 3304
8080 .. 8084
Перейдите в папку с примером expirationd_universal_func
:
cd ./doc/examples/expirationd_universal_func/
Запустите кластер:
docker compose up -d
Описание миграции¶
В руководстве используется миграция из файла ./bootstrap/migrations/source/001_test.lua
примера expirationd_universal_func
.
В этой миграции:
созданы три спейса:
space_too
,space_foo
,space_bar
;создана персистентная универсальная функция
is_tuple_expired
, проверяющая устаревание данных в спейсах;созданы тестовые функции для генерации данных:
generate_data_start
– запуск фоновой записи тестовых данных в спейсы;generate_data_stop
– остановка фоновой записи тестовых данных в спейсы.
Необходимо удалять все записи в спейсе старше заданного количества секунд. Количество секунд задается в конфигурации.
Подключение к узлу и загрузка тестовых данных¶
Подключитесь к экземпляру, используя команду tt connect
.
Команда открывает интерактивную консоль Tarantool, позволяющую работать с базой данных:
tt connect admin:secret-cluster-cookie@localhost:3300
Загрузите тестовые данные в спейсы, используя функцию generate_data_start
:
localhost:3300> box.schema.func.call('generate_data_start')
Для примера достаточно 100-200 записей в спейсе. Посмотреть количество записей можно в веб-интерфейсе во вкладке Space explorer (http://localhost:8081/admin/space-explorer/hosts).
Когда записей в спейсе станет достаточно, отключите генерацию данных с помощью функции generate_data_stop
:
localhost:3300> box.schema.func.call('generate_data_stop')
Конфигурация устаревания данных¶
Включите роль expirationd
на хранилищах. Это можно сделать двумя способами:
в терминале с помощью следующей команды:
curl -sd @activate_expirationd.json http://localhost:8081/admin/api | jq
в веб-интерфейсе Tarantool DB. Для этого перейдите на вкладку Cluster, выберите нужный набор реплик, например
tarantool-storage1
, и нажмите на значок карандаша (Edit replica set). В открывшемся окне редактирования выберите рольexpirationd
в секции Roles.
Теперь задайте конфигурацию для expirationd
.
Для этого:
В веб-интерфейсе Tarantool DB перейдите на вкладку Code (http://localhost:8081/admin/cluster/code).
Создайте файл
expiration.yml
. В нем будет задана конфигурация устаревания данных.Добавьте в файл следующую конфигурацию:
space_too_expiration: space: space_too is_expired: is_tuple_expired is_master_only: true options: tuples_per_iteration: 100 args: seconds: 5 date_field_name: create_date space_foo_expiration: space: space_foo is_expired: is_tuple_expired is_master_only: true options: tuples_per_iteration: 100 args: seconds: 5 date_field_name: dt space_bar_expiration: space: space_bar is_expired: is_tuple_expired is_master_only: true options: tuples_per_iteration: 100 args: seconds: 5 date_field_name: create_at
Здесь:
space_too_expiration
– название задачи по устареванию данных;space
– название спейса, по которому идет поиск устаревших кортежей;is_expired
– название функции, которая получает кортеж и проверяет его срок жизни;is_master_only
– экспирация запущена только на master-узлах;options
– дополнительные опции конфигурации:tuples_per_iteration
– количество кортежей, которое проверяется за одну итерацию;args
– дополнительные аргументы, передаваемые в функциюis_tuple_expired
;seconds
– количество секунд, после истечения которых кортеж считается устаревшим;date_field_name
– название поля с меткой времени.
Полное описание опций конфигурации
expirationd
приведено в соответствующем разделе Справочника по конфигурации.Нажмите кнопку Apply.
Убедитесь, что количество сгенерированных кортежей начинает сокращаться. Для этого откройте веб-интерфейс Tarantool DB на вкладке Space explorer (http://localhost:8081/admin/space-explorer/hosts) и выберите произвольное хранилище.