Изменение структуры базы данных векторов признаков
В некоторых случаях вам может потребоваться применить новую структурную схему к базе данных векторов признаков 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.1.3 make-tnt-schema | sudo tee /opt/findface-multi/configs/findface-tarantool-server/tnt-schema.lua
Откройте файл
docker-compose.yaml
и убедитесь, что в каждом сервисе шарда Tarantool в разделеenvironment
присутствует заполненная переменнаяCFG_EXTRA_LUA: loadfile("/tnt_schema.lua")
.sudo vi /opt/findface-multi/docker-compose.yaml ... findface-tarantool-server-shard-001: depends_on: [findface-ntls] environment: {CFG_EXTRA_LUA: loadfile("/tnt_schema.lua")()... ...
Удалите данные из каталогов, соответствующих активным шардам.
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;'
Важно
Если некоторые прежние поля отсутствуют в новой структуре базы данных, сначала потребуется вручную удалить соответствующие данные из резервной копии.