Изменение структуры базы данных векторов признаков

В некоторых случаях вам может потребоваться применить новую структурную схему к базе данных векторов признаков Tarantool, например, при обновлении до последней версии продукта или если необходимо усовершенствовать структуру базы данных, добавив в нее дополнительные параметры, расширенные метаданные объектов и т. д.

В этом разделе:

О структуре биометрической базы данных

В FindFace Multi структура базы данных задается через файл /etc/findface-security/tnt_schema.lua.

Структура представляет собой набор полей, каждое из которых описывается следующими параметрами:

  • id: id поля;

  • name: название поля, должно совпадать с названием соответствующего параметра объекта;

  • field_type: тип данных;

  • default: значение по умолчанию. Если значение по умолчанию больше ‘1e14 – 1’, то его следует записывать в виде строки, т. е. “123123..” вместо 123123...

Используемый по умолчанию файл tnt_schema.lua доступен по ссылке.

Изменение структуры

Для изменения структуры базы данных выполните следующие действия:

  1. Остановите сервис findface-security.

    sudo systemctl stop findface-security.service
    
  2. Создайте резервную копию базы данных векторов признаков в любой выбранной директории, например, /etc/findface_dump.

    mkdir -p /etc/findface_dump
    cd /etc/findface_dump
    sudo findface-storage-api-dump -config /etc/findface-sf-api.ini
    
  3. Подготовьте файл tnt_schema.lua с новой структурой базы данных.

  4. Измените структуру базы данных с помощью подготовленного файла tnt_schema.lua.

    sudo findface-security make_tnt_schema | sudo tee /etc/findface-security/tnt_schema.lua
    
  5. Перейдите в директорию с файлами конфигурации Tarantool /etc/tarantool/instances.available/. Убедитесь, что перед секцией FindFace.start добавлена строка dofile("/etc/findface-security/tnt_schema.lua"), а переменные meta_scheme и meta_indexes определены в параметрах FindFace.start.

    sudo vi /etc/tarantool/instances.available/<shard_00N>.lua
    
    dofile("/etc/findface-security/tnt_schema.lua")
    
    FindFace.start("127.0.0.1", 8101, {
        license_ntls_server="127.0.0.1:3133",
        meta_indexes=meta_indexes,
        meta_scheme = meta_scheme
    })
    
  6. Очистите директории с данными для всех активных шардов.

    sudo rm /opt/ntech/var/lib/tarantool/shard-*/{index,snapshots,xlogs}/*
    
  7. Восстановите базу данных Tarantool из резервной копии.

    Важно

    Если некоторые прежние поля отсутствуют в новой структуре базы данных, сначала потребуется вручную удалить соответствующие данные из резервной копии.

    cd /tmp/dump
    for x in *.json; do curl -X POST "http://127.0.0.1:18411/v2/galleries/${x%%.json}"; done
    for x in *.json; do sudo findface-storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done
    
  8. Запустите сервис findface-security.

    sudo systemctl start findface-security.service