Операция мониторинга расхождений в данных (dataDifferenceJob)
Операция предназначена для диагностики и контроля целостности данных между основным хранилищем (PostgreSQL) и поисковым индексом (OpenSearch). Ее ключевая цель — выявлять и документировать расхождения: записи, которые присутствуют в одном хранилище, но отсутствуют в другом. Это критически важный инструмент для обеспечения надежности поиска и согласованности данных в системе.
Параметры операции
Имя пользователя (поле ввода): Логин учетной записи. Настоятельно рекомендуется к заполнению. Определяет права доступа операции и автора запуска.
Для операции, сконфигурированной для запуска по расписанию (Cron-выражение), обязательно требуется указать имя пользователя.
Если поле заполнено, операция запустится от имени указанного пользователя (при условии его существования), иначе - не запустится.
Если поле пустое, операция выполняется от имени пользователя, который ее запустил. В этом случае выход этого пользователя из системы приведет к аварийному завершению операции.
Режим запуска - доступен в трех вариантах:
Проверка наличия расхождений - отчет не генерируется, только отправляется уведомление с сообщением о количестве расхождений.
Генерация обобщенной статистики - генерируется XLSX отчет с одним листом с количеством расхождений по каждому реестру/справочнику.
Генерация полного отчета - генерируется XLSX отчет со статистикой и перечислением всех отсутствующих эталонов для каждого реестра/справочника.
Размер блока данных - Количество записей, обрабатываемых за одну итерацию при проверке. Значение по умолчанию — 1024.
Куда сохранить отчет - В текущей реализации всегда имеет фиксированное значение NOTIFICATION. Это означает, что сформированный XLSX-отчет будет доступен для скачивания исключительно в разделе системных уведомлений.
Внутренние механизмы
Операция выполняется в два строго последовательных шага, обеспечивающих двустороннюю проверку:
Проверка PostgreSQL → OpenSearch: Система выполняет запрос к таблице
record_etalonsв БД, собирает идентификаторы всех эталонных записей. Затем для каждого идентификатора проверяется его наличие в соответствующем индексе сущности в OpenSearch. Эталоны, найденные в БД, но отсутствующие в индексе, фиксируются в статистике.Проверка OpenSearch → PostgreSQL: Система опрашивает все индексы OpenSearch, собирает идентификаторы эталонных записей из них. Затем для каждого идентификатора проверяется его наличие в таблице
record_etalonsв БД. Эталоны, найденные в индексе, но отсутствующие в БД, фиксируются в статистике.
После завершения обоих шагов, в зависимости от выбранного режима, формируется итоговое уведомление и, при необходимости, файл отчета.
Важно знать/Ограничения
Обязательное условие для Cron-запуска: При настройке операции для выполнения по расписанию (Cron-выражение) в параметрах обязательно должно быть указано "Имя пользователя". Без этого операция не будет запускаться автоматически.
Способ получения отчета: В текущей версии системы отсутствует возможность отправлять XLSX-отчет по электронной почте или во внешнее хранилище (например, Minio). Отчет всегда сохраняется только в разделе "Уведомления" интерфейса системы (значение параметра
NOTIFICATION).Производительность: Проверка больших объемов данных может создавать нагрузку как на базу данных, так и на кластер OpenSearch. Настройка "Размера блока данных" позволяет балансировать между скоростью выполнения и потреблением ресурсов.
Типы расхождений: Операция отслеживает только факт наличия или отсутствия эталона в одном из хранилищ. Она не сравнивает содержимое полей записей на идентичность.
Результат работы операции
Результат зависит от выбранного режима запуска:
В любом режиме: В разделе "Уведомления" системы появится запись о завершении операции с ключевой сводкой.
В режимах 2 и 3: К этому уведомлению будет прикреплен XLSX-файл:
Обобщенная статистика: Один лист с таблицей, где для каждого реестра/справочника указано количество расхождений в каждую сторону.
Полный отчет: Дополнительно включает отдельный лист с полным списком идентификаторов (EtalonId) всех отсутствующих эталонов, сгруппированных по сущностям.