Индексирование для быстрого поиска по базе данных

Для ускорения поиска каждая галерея должна быть проиндексирована. Для подготовки быстрого индекса вам понадобится утилита findface-tarantool-build-index (устанавливается из консольного инсталлятора). Для работы данной утилиты не требуется компонент findface-tarantool-server, поэтому она может использоваться как на сервере базы данных Tarantool, так и на удаленном сервере с доступом к базе данных.

Для подготовки быстрого индекса выполните следующие действия:

  1. Если вы установили ядро FindFace пошагово, установите утилиту findface-tarantool-build-index.

    sudo apt install findface-tarantool-build-index
    
  2. Создайте быстрый индекс для вашей галереи (testgal в примерах ниже). Сначала подключитесь к консоли базы данных Tarantool.

    Важно

    Галерея не должна быть пустой. Для наполнения галереи лицами см. Прямые API-запросы к базе данных Tarantool.

    Примечание

    Создание быстрого индекса производится на каждом шарде findface-tarantool-server.

    tarantoolctl connect 127.0.0.1:33001
    
  3. Выполните метод prepare_preindex. В результате все элементы из пространства linear в данной галерее будут перемещены в пространство preindex:

    127.0.0.1:33001> FindFace.Gallery.new("testgal"):prepare_preindex()
    ---
    ...
    
  4. Сохраните пространство preindex в файл, который будет использован для генерации индекса:

    127.0.0.1:33001> FindFace.Gallery.new("testgal"):save_preindex("/tmp/preindex.bin")
    ---
    ...
    
  5. Запустите генерацию индекса на основе файла preindex.bin с помощью утилиты findface-tarantool-build-index (вызовите --help для ознакомления с дополнительными опциями). В зависимости от количества элементов, данный процесс может занимать до нескольких часов. В этом случае индексирование лучше выполнять на отдельной, более мощной машине (для больших галерей рекомендуется использовать c4.8xlarge amazon, например, spot-instance).

    sudo findface-build-index --input /tmp/preindex.bin --output /opt/ntech/var/lib/tarantool/default/index/testgal.idx --facen_size 320
    Config values:
    .input = /tmp/preindex.bin
    .output = /opt/ntech/var/lib/tarantool/default/index/testgal.idx
    .facen_size = 320
    .param_m = 12
    .param_ef = 500
    .limit = 4294967295
    
    Building index: [XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 100% ; 3 / 3
    Index saved at /opt/ntech/var/lib/tarantool/default/index/testgal.idx
    
  6. Удалите файл preindex.bin.

    sudo rm /tmp/preindex.bin
    
  7. Включите быстрый индекс для галереи.

    Примечание

    Если 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")
    ---
    ...
    
  8. После включения быстрого индекса поиск по галерее должен стать значительно быстрее. Информация об индексе остается в служебном пространстве Tarantool, поэтому когда вы перезапускаете Tarantool, индекс также подгружается.

    Предупреждение

    Не перемещайте файл индекса!