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

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

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

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

В FindFace Multi структура базы данных задается через файл /opt/findface-multi/configs/findface-tarantool-server/tnt-schema.lua.

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

  • id: id поля;

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

  • field_type: тип данных (unsigned|string|set[string]|set[unsigned]);

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

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

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

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

  1. Создайте резервную копию базы данных векторов признаков на основе Tarantool в любой выбранной директории, например, /etc/ffmulti_dump.

    sudo docker exec -it findface-multi-findface-sf-api-1 bash -c "mkdir ffmulti_dump; cd ffmulti_dump && /storage-api-dump -config /etc/findface-sf-api.ini"
    sudo docker cp findface-multi-findface-sf-api-1:/ffmulti_dump /etc
    
  2. Измените структуру базы данных, добавив новую схему в файл tnt_schema.lua.

    sudo docker run --rm --network host --volume '/opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffmulti-2.0.0 make-tnt-schema | sudo tee /opt/findface-multi/configs/findface-tarantool-server/tnt-schema.lua
    
  3. Перейдите в директорию с файлами конфигурации Tarantool /opt/findface-multi/configs/findface-tarantool-server/. Убедитесь, что каждый шард shard-00*.lua содержит команду dofile. Удостоверьтесь, что переменные replication и spaces определены в параметре FindFace.start, как показано в примере.

    sudo vi /opt/findface-multi/configs/findface-tarantool-server/shard-00*.lua
    
    dofile("/tnt_schema.lua")
    
    
    -- host:port to bind, HTTP API
    FindFace = require("FindFace")
    FindFace.start("127.0.0.1", 8101, {
        license_ntls_server="127.0.0.1:3133",
        replication = replication_master,
        spaces = spaces
    })
    
  4. Удалите данные из каталогов, соответствующих активным шардам.

    sudo rm /opt/findface-multi/data/findface-tarantool-server/shard-*/{index,snapshots,xlogs}/*
    
  5. Перезапустите шарды findface-tarantool-server.

    docker restart findface-multi-findface-tarantool-server-shard-001-1 findface-multi-findface-tarantool-server-shard-002-1 findface-multi-findface-tarantool-server-shard-003-1 findface-multi-findface-tarantool-server-shard-004-1 findface-multi-findface-tarantool-server-shard-005-1 findface-multi-findface-tarantool-server-shard-006-1 findface-multi-findface-tarantool-server-shard-007-1 findface-multi-findface-tarantool-server-shard-008-1
    
  6. Восстановите базу данных Tarantool из резервной копии.

    sudo docker exec -it findface-multi-findface-sf-api-1 bash -c 'cd ffmulti_dump && for x in *.json; do /storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done;'
    

    Важно

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