Проверка устаревших кортежей с помощью универсальной функции | Tdb
Руководство пользователя Устаревание данных Проверка устаревших кортежей с помощью универсальной функции

Проверка устаревших кортежей с помощью универсальной функции

Доступно с версии 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. Для этого:

  1. В веб-интерфейсе Tarantool DB перейдите на вкладку Code (http://localhost:8081/admin/cluster/code).

  2. Создайте файл expiration.yml. В нем будет задана конфигурация устаревания данных.

    add_config

  3. Добавьте в файл следующую конфигурацию:

    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 приведено в соответствующем разделе Справочника по конфигурации.

  4. Нажмите кнопку Apply.

  5. Убедитесь, что количество сгенерированных кортежей начинает сокращаться. Для этого откройте веб-интерфейс Tarantool DB на вкладке Space explorer (http://localhost:8081/admin/space-explorer/hosts) и выберите произвольное хранилище.

Остановка кластера

Чтобы остановить кластер, выполните следующую команду:

docker compose down
Нашли ответ на свой вопрос?
Обратная связь