Изменение структуры базы данных векторов признаков
В некоторых случаях вам может потребоваться применить новую структурную схему к базе данных векторов признаков Tarantool, например, при обновлении до последней версии продукта или если необходимо усовершенствовать структуру базы данных, добавив в нее дополнительные параметры, расширенные метаданные лиц и т. д.
В этом разделе:
О структуре биометрической базы данных
В FindFace CIBR структура базы данных задается через файл /opt/findface-cibr/configs/findface-tarantool-server/tnt-schema.lua
.
Структура представляет собой набор пространств (spaces
) и полей, каждое из которых описывается следующими параметрами:
id: id поля;
name: название поля, должно совпадать с названием соответствующего параметра объекта;
field_type: тип данных;
default: значение по умолчанию. Если значение по умолчанию больше
1e14 – 1
, то его следует записывать в виде строки, т. е."123123.."
вместо123123..
.
Используемый по умолчанию файл tnt-schema.lua
доступен по ссылке
.
Изменение структуры
Для изменения структуры базы данных выполните следующие действия:
Создайте резервную копию базы данных векторов признаков на основе Tarantool в любой выбранной директории, например,
/etc/ffcibr_dump
.sudo docker exec -it findface-cibr-findface-sf-api-1 bash -c "mkdir ffcibr_dump; cd ffcibr_dump && /storage-api-dump -config /etc/findface-sf-api.ini" sudo docker cp findface-cibr-findface-sf-api-1:/ffcibr_dump /etc
Измените структуру базы данных, добавив новую схему в файл
tnt-schema.lua
.sudo docker run --rm --network host --volume '/opt/findface-cibr/configs/findface-multi-legacy/findface-multi-legacy.py:/etc/findface-security/config.py:ro' docker.int.ntl/ntech/multi/multi/legacy:ffcibr-2.1.1 make-tnt-schema | sudo tee /opt/findface-cibr/configs/findface-tarantool-server/tnt-schema.lua
Откройте файл
docker-compose.yaml
и убедитесь, что в каждом сервисе шарда Tarantool в разделеenvironment
присутствует заполненная переменнаяCFG_EXTRA_LUA: loadfile("/tnt_schema.lua")
.sudo vi /opt/findface-cibr/docker-compose.yaml ... findface-tarantool-server-shard-001: depends_on: [findface-ntls] environment: {CFG_EXTRA_LUA: loadfile("/tnt_schema.lua")()... ...
Удалите данные из каталогов, соответствующих активным шардам.
sudo rm /opt/findface-cibr/data/findface-tarantool-server/shard-*/{index,snapshots,xlogs}/*
Перезапустите шарды
findface-tarantool-server
.docker restart findface-cibr-findface-tarantool-server-shard-001-1 findface-cibr-findface-tarantool-server-shard-002-1 findface-cibr-findface-tarantool-server-shard-003-1 findface-cibr-findface-tarantool-server-shard-004-1 findface-cibr-findface-tarantool-server-shard-005-1 findface-cibr-findface-tarantool-server-shard-006-1 findface-cibr-findface-tarantool-server-shard-007-1 findface-cibr-findface-tarantool-server-shard-008-1
Восстановите базу данных Tarantool из резервной копии.
sudo docker exec -it findface-cibr-findface-sf-api-1 bash -c 'cd ffcibr_dump && for x in *.json; do /storage-api-restore -config /etc/findface-sf-api.ini < "$x"; done;'
Важно
Если некоторые прежние поля отсутствуют в новой структуре базы данных, сначала потребуется вручную удалить соответствующие данные из резервной копии.