Индексирование для быстрого поиска по базе данных¶
Для ускорения поиска галереи с количеством лиц более 1 000 000
должны быть проиндексированы. Для подготовки быстрого индекса вам понадобится утилита findface-tarantool-build-index
из вашего дистрибутивного пакета. Для работы данной утилиты не требуется компонент tntapi
, поэтому она может быть установлена как на сервере базы данных Tarantool, так и на удаленном сервере с доступом к базе данных.
Для подготовки быстрого индекса выполните следующие действия:
Установите утилиту
findface-tarantool-build-index
.sudo apt-get install findface-tarantool-build-index
Создайте быстрый индекс для вашей галереи (
testgal
в примерах ниже). Сначала подключитесь к консоли базы данных Tarantool.Примечание
Создание быстрого индекса производится на каждом шарде
tntapi
.tarantoolctl connect 127.0.0.1:33001
Выполните метод
prepare_preindex
. В результате все элементы из пространстваlinear
в данной галерее будут перемещены в пространствоpreindex
:127.0.0.1:33001> FindFace.Gallery.new("testgal"):prepare_preindex() --- ...
Сохраните пространство
preindex
в файл, который будет использован для генерации индекса:127.0.0.1:33001> FindFace.Gallery.new("testgal"):save_preindex("/tmp/preindex.bin") --- ...
Запустите генерацию индекса на основе файла
preindex.bin
с помощью утилитыfindface-build-index
(вызовите--help
для ознакомления с дополнительными опциями). В зависимости от количества элементов, данный процесс может занимать до нескольких часов. В этом случае индексирование лучше выполнять на отдельной, более мощной машине (для больших галерей рекомендуется использовать c4.8xlarge amazon, например, spot-instance).sudo findface-build-index --input /tmp/preindex.bin --facen_size 320 --out /opt/ntech/var/lib/tarantool/default/index/testgal.idx 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----| ************************************************** 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----| ************************************************** [Benchmark] create_index took 29.994ms Index saved at /opt/ntech/var/lib/tarantool/default/index/testgal.idx
Удалите файл
preindex.bin
.sudo rm /tmp/preindex.bin
Включите быстрый индекс для галереи.
Примечание
Если Tarantool функционирует как набор реплик, скопируйте по такому же пути на сервер-реплику файл индекса (
.idx
) и только после этого включите быстрый индекс на мастере (:use_index
).Совет
Рекомендуется удалять все файлы индекса на реплике, кроме последнего, во избежание промежуточных обновлений индекса в случае сильного отставания реплики от мастера.
127.0.0.1:33001> FindFace.Gallery.new("testgal"):preindex_to_index() --- ... 127.0.0.1:33001> FindFace.Gallery.new("testgal"):use_index("/opt/ntech/var/lib/tarantool/default/index/testgal.idx") --- ...
После включения быстрого индекса поиск по галерее должен стать значительно быстрее (в 70-100 раз). Информация об индексе остается в служебном пространстве Tarantool, поэтому когда вы перезапускаете Tarantool, индекс также подгружается.
Предупреждение
Не перемещайте файл индекса!