Операция переиндексации (reindexDataJob)

Операция переиндексации данных предназначена для запуска индексации поисковой системы при значимых изменениях в структуре записей или при добавлении новых данных. Индексированные данные ускоряют поиск и отображаются в интерфейсе пользователя.

Операция запускает процесс индексации Openearch и OrientDB при значимых изменениях в структуре записей с целью ускорения поиска.

По условиям лицензирования у операции reindexDataJob может быть отключена многопоточность. В таком случае операция будет запускаться только на одном узле кластера.

Параметры операции

  • Имя пользователя – логин учетной записи (рекомендуется к заполнению). Определяет, с правами какой учетной записи будет запускаться операция. Если поле пустое, то:

    • Операция выполняется от имени пользователя, фактически запустившего операцию, но если при запущенной без указания пользователя операции произошел выход из системы (случайный или принудительный при потере соединения), то операция завершится с ошибкой.

    • При запуске по Cron-выражению у операции будут полные права на любой тип актива/справочник; при запуске через интерфейс у операции будут права текущей учетной записи. Для учетной записи оператора данных может понадобиться настроить права на тип активы/справочники.

  • ID Операции - идентификатор операции.

  • Размер блока – размер блока загружаемых данных, по умолчанию = 1024.

Секция "Индексация активов":

  • Проиндексировать черновики – флаг переиндексации черновиков;

  • Проиндексировать связи – флаг переиндексации связей;

  • Проиндексировать активы – флаг переиндексации данных активов;

  • Писать лог ошибок - при включении флага записи с ошибками будут записываться в таблицы postgres (обязательно указание ID операции);

  • Обработать лог ошибок - при включении флага и повторном запуске операции с тем же ID операции данные из таблиц postgres будут повторно переиндексированы;

    • Допускается запуск операции с одновременно включенными флагами "Писать лог ошибок" и "Обработать лог ошибок". В этом случае при повторной переиндексации данных из лога данные с ошибками снова запишутся в лог.

    • Механизм повторной переиндексации не работает для черновиков.

  • Не создавать стандартный отчет - флаг отвечает за создание стандартного отчета в уведомлениях о количестве переиндексированных активов после завершения операции;

  • Обновить маппинги – параметр, обновляющий маппинги в Opensearch;

  • Очищать индексы – параметр, очищающий индексы Opensearch, а также индексы результатов запусков сканеров;

  • Очищать граф – параметр, очищающий графы связей;

  • Обновить граф – флаг обновления графа.

Секция "Индексация бизнес-процессов":

  • Проиндексировать данные бизнес-процессов — флаг переиндексации бизнес-процессов, а также активных и завершенных задач, переменных, комментариев и вложений.

  • Проиндексировать бизнес-процессы — позволяет выбрать бизнес-процессы, данные которых будут переиндексированы. Параметр активен, если включен флаг "Проиндексировать данные бизнес-процессов".

Секция "Метки данных":

  • Проиндексировать метки данных - флаг переиндексации меток данных.

  • Очистить индекс - параметр, очищающий индексы меток данных.

Секция "Индексация черновиков":

  • Проиндексировать черновики – параметр, обновляющий информацию обо всех черновиках активов.

Секция "Индексация модели справочников":

  • Проиндексировать модель справочников - флаг переиндексации модели справочников.

Секция "Индексация справочников":

  • Проиндексировать данные - флаг переиндексации данных справочников.

  • Проиндексировать черновики – параметр, обновляющий информацию обо всех черновиках справочников.

  • Проиндексировать объекты модели – справочники, для которых будет выполнена переиндексация (доступен выбор нескольких). По умолчанию установлено значение "Все справочники".

  • Фоновая переиндексация - флаг, позволяющий запускать операцию в фоновом режиме.

  • Не создавать стандартный отчет – параметр отвечает за создание стандартного отчета в уведомлениях о количестве переиндексированных справочников после завершения операции.

  • Писать лог ошибок – параметр, записывающий ошибки в лог.

  • Обработать лог ошибок – параметр, определяющий, будут ли браться данные из лога ошибок.

  • Продолжать при ошибках? - флаг, при включении которого продолжается запуск блока даже в случае возникновения ошибок.

Когда применяется

Операция запускается в случаях:

Периодичность запуска определяется администратором системы с учетом рабочих задач по обслуживанию Юниверс DG.

Лог ошибок

Писать/Обработать лог ошибок сохраняет в БД информацию о записях, не попавших в индекс, чтобы при дальнейшем запуске была возможность дообработать только неудачно завершившуюся часть, что существенно экономит время на полную переиндексацию большого количества записей.

Параметры используются в случае, когда происходит прерывание очереди индексации Opensearch и завершение индексирующих запросов с ошибкой EsRejectedExecutionException. Во всех остальных случаях параметры должны быть отключены.

Если необходимо переиндексировать большие данные:

  • Сначала запускается операция с Писать лог ошибок.

  • Далее, если остаются неиндексированные данные, то запускается операция повторно, выключив Писать лог ошибок и включив Обработать лог ошибок.

Также при больших данных можно отключать параметры Очищать индексы и Обновить маппинги.

Механизм работы параметра "Размер блока" (blockSize)

Все количество обрабатываемых записей делится на части по blockSize записей.

Затем в каждой части обрабатывается одним тредом по org.unidata.mdm.job.reindex.data.commit.interval записей (в памяти держится информация по этому количеству записей, при переходе к следующим записям память очищается), пока не кончатся записи.

Параметр org.unidata.mdm.job.reindex.data.commit.interval, как правило, не нуждается в редактировании. Рекомендуемого значения 1000 достаточно для большинства задач. Чем больше этот параметр, тем больше памяти может быть занято в один момент времени. Если этот параметр больше, чем blockSize, то фактически этот параметр будет равен blockSize.

org.unidata.mdm.job.reindex.data.reindex.threads - количество одновременно обрабатываемых тредов.

Параметры org.unidata.mdm.job.reindex.data.commit.interval и org.unidata.mdm.job.reindex.data.reindex.threads задаются в backend.properties.

Таким образом, следует выбирать org.unidata.mdm.job.reindex.data.reindex.threads по количеству логических ядер процессора (использовать равное или меньшее число, в зависимости от наличия другой нагрузки на процессор).

При указании небольшого blockSize легче отслеживать прогресс операции через UI (менеджер запусков > выбрать запуск > количество выполненных шагов).

Также blockSize необходимо выбирать в соответствии с общим количеством данных чтобы количество партиций не было слишком большим. На таких больших данных, как в справочнике с адресами, оптимальным вариантом является 500-2000 партиций.

Обработка данных происходит последовательно: активы > связи > справочники > бизнес-процессы. Сначала завершается обработка одного типа данных, затем происходит переход к другому. Обрабатываются те типы данных, которые есть в наличии.

Фоновая переиндексация

Стандартные имена индексов являются псевдонимами. Например, имя индекса samolet_default_[draft] является псевдонимом для текущего реального индекса samolet_default_[draft]-1732482608717. Система сохраняет состояние присвоения между перезапусками, это позволяет держать несколько реальных индексов, относящихся к одному и тому же псевдониму, и дает возможность переиндексировать данные без очистки текущих индексов, т.е. не останавливать работу на время переиндексации и работать в фоновом режиме.

Индексация в фоновые индексы создает специальный объект переиндексации на кластере, который содержит ссылки на реальные индексы, созданные для будущей привязки к псевдонимам. Код индекс-компоненты сделан таким образом, что если при вводе есть ID процесса фоновой переиндексации, то запрос перенаправляется в фоновый индекс, контролируемый процессом с таким ID. Это дает возможность принимать обновления в существующие индексы, не прерывая работу пользователей и делая работу задачи переиндексации менее заметной.

Регулярные обновления, создаваемые во время работы задачи, могут быть направлены сразу в несколько индексов - в основной, который виден пользователю, и в фоновые. Чтобы предотвратить переписывание более новых данных старыми со стороны индексера используется optimistic lock в виде внешней версии, равное 1 (поля version и version_type - см. подробнее в статье). По окончании работы индексера специальная распределенная задвижка кратковременно останавливает все индексирующие потоки на кластере для переключения псевдонимов на новые индексы. Также задвижка срабатывает перед началом переиндексации данных. Это может быть заметно на средствах мониторинга и является нормальным.

Для поддержки фоновой индексации индексируемый тип должен иметь ManagedIndexId. Это значит, что идентификаторы записей индекса должны быть предсказуемо конструируемы для поддержки удаления без дополнительных запросов. Из всего массива индексируемых сейчас данных ManagedIndexId не поддерживает только модель данных и модель классификаторов. Они не могут быть проиндексированы в фоновом режиме. Все остальные могут, и на этом основании были убраны флаги "Обновить маппинг" и "Очистить индекс".

Системные параметры, влияющие на процесс фоновой переиндексации:

  • org.unidata.mdm.search.switch.await.timeout - Максимальное время ожидания переключения индекса задвижкой, значение по умолчанию = 60000 миллисекунд;

  • org.unidata.mdm.search.background.id.lock.timeout - Время ожидания при захвате идентификатора фонового процесса переиндексации, значение по умолчанию = 20000 миллисекунд;

  • org.unidata.mdm.search.background.orphan.expiration.interval - Время жизни заброшенных фоновых процессов переиндексации, значение по умолчанию = сутки.