Изменение структуры базы данных векторов признаков
В некоторых случаях вам может потребоваться применить новую структурную схему к базе данных векторов признаков 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
доступен по ссылке
.
Изменение структуры
Для изменения структуры базы данных выполните следующие действия:
Создайте резервную копию базы данных векторов признаков на основе 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
Измените структуру базы данных, добавив новую схему в файл
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
Перейдите в директорию с файлами конфигурации 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 })
Удалите данные из каталогов, соответствующих активным шардам.
sudo rm /opt/findface-multi/data/findface-tarantool-server/shard-*/{index,snapshots,xlogs}/*
Перезапустите шарды
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
Восстановите базу данных 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;'
Важно
Если некоторые прежние поля отсутствуют в новой структуре базы данных, сначала потребуется вручную удалить соответствующие данные из резервной копии.