Операция мониторинга расхождений в данных (dataDifferenceJob)

Операция предназначена для диагностики и контроля целостности данных между основным хранилищем (PostgreSQL) и поисковым индексом (OpenSearch). Ее ключевая цель — выявлять и документировать расхождения: записи, которые присутствуют в одном хранилище, но отсутствуют в другом. Это критически важный инструмент для обеспечения надежности поиска и согласованности данных в системе.

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

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

    • Для операции, сконфигурированной для запуска по расписанию (Cron-выражение), обязательно требуется указать имя пользователя.

    • Если поле заполнено, операция запустится от имени указанного пользователя (при условии его существования), иначе - не запустится.

    • Если поле пустое, операция выполняется от имени пользователя, который ее запустил. В этом случае выход этого пользователя из системы приведет к аварийному завершению операции.

  • Режим запуска - доступен в трех вариантах:

    • Проверка наличия расхождений - отчет не генерируется, только отправляется уведомление с сообщением о количестве расхождений.

    • Генерация обобщенной статистики - генерируется XLSX отчет с одним листом с количеством расхождений по каждому реестру/справочнику.

    • Генерация полного отчета - генерируется XLSX отчет со статистикой и перечислением всех отсутствующих эталонов для каждого реестра/справочника.

  • Размер блока данных - Количество записей, обрабатываемых за одну итерацию при проверке. Значение по умолчанию — 1024.

  • Куда сохранить отчет - В текущей реализации всегда имеет фиксированное значение NOTIFICATION. Это означает, что сформированный XLSX-отчет будет доступен для скачивания исключительно в разделе системных уведомлений.

Внутренние механизмы

Операция выполняется в два строго последовательных шага, обеспечивающих двустороннюю проверку:

  1. Проверка PostgreSQL → OpenSearch: Система выполняет запрос к таблице record_etalons в БД, собирает идентификаторы всех эталонных записей. Затем для каждого идентификатора проверяется его наличие в соответствующем индексе сущности в OpenSearch. Эталоны, найденные в БД, но отсутствующие в индексе, фиксируются в статистике.

  2. Проверка OpenSearch → PostgreSQL: Система опрашивает все индексы OpenSearch, собирает идентификаторы эталонных записей из них. Затем для каждого идентификатора проверяется его наличие в таблице record_etalons в БД. Эталоны, найденные в индексе, но отсутствующие в БД, фиксируются в статистике.

После завершения обоих шагов, в зависимости от выбранного режима, формируется итоговое уведомление и, при необходимости, файл отчета.

Важно знать/Ограничения

  • Обязательное условие для Cron-запуска: При настройке операции для выполнения по расписанию (Cron-выражение) в параметрах обязательно должно быть указано "Имя пользователя". Без этого операция не будет запускаться автоматически.

  • Способ получения отчета: В текущей версии системы отсутствует возможность отправлять XLSX-отчет по электронной почте или во внешнее хранилище (например, Minio). Отчет всегда сохраняется только в разделе "Уведомления" интерфейса системы (значение параметра NOTIFICATION).

  • Производительность: Проверка больших объемов данных может создавать нагрузку как на базу данных, так и на кластер OpenSearch. Настройка "Размера блока данных" позволяет балансировать между скоростью выполнения и потреблением ресурсов.

  • Типы расхождений: Операция отслеживает только факт наличия или отсутствия эталона в одном из хранилищ. Она не сравнивает содержимое полей записей на идентичность.

Результат работы операции

Результат зависит от выбранного режима запуска:

  1. В любом режиме: В разделе "Уведомления" системы появится запись о завершении операции с ключевой сводкой.

  2. В режимах 2 и 3: К этому уведомлению будет прикреплен XLSX-файл:

    • Обобщенная статистика: Один лист с таблицей, где для каждого реестра/справочника указано количество расхождений в каждую сторону.

    • Полный отчет: Дополнительно включает отдельный лист с полным списком идентификаторов (EtalonId) всех отсутствующих эталонов, сгруппированных по сущностям.