Modify Feature Vector Database Structure
Sometimes it may be necessary to apply a new structural schema to your Tarantool-based feature vector database, for example, when updating to the latest version of the product, or when you want to enhance the default database structure with additional parameters, advanced face metadata, and so on.
In this section:
About Database Structure
In FindFace Multi, the database structure is set via the /opt/findface-multi/configs/findface-tarantool-server/tnt-schema.lua
file.
The structure is created as a set of spaces and fields. Each field is described with the following parameters:
id
: field id;name
: field name, must be the same as the name of a relevant object parameter;field_type
: data type (unsigned|string|set[string]|set[unsigned]
);default
: field default value. If a default value exceeds1e14 – 1
, use a string data type to specify it, for example,"123123.."
instead of123123..
.
You can find the default tnt-schema.lua
file here
.
Structure Modification
To modify the database structure, do the following:
Create a backup of the Tarantool-based feature vector database in any directory of your choice, for example,
/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
Modify the database structure by applying the new schema to the
tnt-schema.lua
file.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.0 make-tnt-schema | sudo tee /opt/findface-multi/configs/findface-tarantool-server/tnt-schema.lua
Open the
docker-compose.yaml
file. Make sure each Tarantool shard service contains defined variableCFG_EXTRA_LUA: loadfile("/tnt_schema.lua")
in theenvironment
section.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")()... ...
Purge data from all the directories relevant to active shards.
sudo rm /opt/findface-multi/data/findface-tarantool-server/shard-*/{index,snapshots,xlogs}/*
Restart the
findface-tarantool-server
shards.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
Restore the Tarantool database from the backup.
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;'
Important
If some fields were removed from the new database structure, you have to first manually delete the corresponding data from the backup copy.
See also