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

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

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

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

  • Имя пользователя (поле ввода). Логин учетной записи. Определяет, с правами какой учетной записи будет запускаться операция. Если поле пустое, то при запуске по Cron-выражению у операции будут полные права на любой реестр/справочник; при запуске через интерфейс у операции будут права текущей учетной записи. Для учетной записи оператора данных может понадобиться настроить права на реестры/справочники.

  • Очищать индексы (флаг). Удаляет старые индексы и создает новые.

  • Не создавать стандартный отчет (флаг). Отключает запись событий в журнал аудита.

  • Обновить маппинги (флаг). Обновляет маппинги индекса.

  • Проиндексировать объекты модели (выпадающий список). Реестр/справочник для которого будет выполнена переиндексация (доступен выбор нескольких). По умолчанию установлено значение All - операция выполняется для всех реестров/справочников.

  • Размер блока (поле ввода). Размер блока загружаемых данных (количество записей). Значение по умолчанию 1024.

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

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

  • Проиндексировать записи (флаг). Запускает переиндексацию записей.

  • Проиндексировать связи (флаг). Запускает переиндексацию связей.

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

  • Проиндексировать черновики (флаг). Выполняет индексацию черновиков в индекс default_default_[draft].

  • Проиндексировать модель данных (флаг). Выполняет индексацию модели данных в индекс default_default_[model].

  • Проиндексировать классификацию (флаг). Запускает переиндексацию классификации.

  • Писать лог ошибок (флаг). Сохраняет данные неудачных интервалов фиксации в БД.

  • Обработать лог ошибок (флаг). Активирует режим дообработки накопленных неудачных запросов.

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

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

  • Если производились значимые изменения модели данных, записях, классификации, таблицы сопоставления и т.д.

  • Если есть сомнения в актуальности данных в индексе. Например, не отображается часть записей.

  • Если было загружено много данных, и они не отображаются.

  • Если индекс данных был очищен вручную.

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

Лог ошибок

Примечание

Одновременно должен быть включен только один параметр: Писать лог ошибок (writeIdLog) ИЛИ Обработать лог ошибок (processIdLog)

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

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

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

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

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

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

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

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

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

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

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

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

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

При указании небольшого blockSize легче отслеживать прогресс операции через UI (менеджер запусков > выбрать запуск > количество выполненных шагов). С точки зрения производительности лучше использовать достаточно большой blockSize, чтобы количество мигрируемых записей было примерно равно N * blockSize * com.unidata.mdm.job.reindex.data.threads, где N – не слишком большое натуральное число, например, 1.

Если blockSize слишком большой (например, 500000), то часть данных может не записаться, но при этом операция завершится успешно.

Настройка blockSize необходима для баланса между объемом обрабатываемых данных и количеством потоков. Плохо, когда создается очень много потоков, и так же плохо когда 1 поток обрабатывает слишком много данных сразу. Поэтому желательно выбирать средние значения исходя из доступных ресурсов сервера.

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

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