Операция миграции данных из MDM 5.x в 6.х (migrateDataJob)

Состав таблиц БД в MDM 5.x в MDM 6.х отличается, поэтому прямого обновления на новую версию системы не предусмотрено.

Эта операция позволяет перенести данные и связи из MDM 5.x в 6.х. Переносятся только объекты БД, поэтому после выполнения этой операции необходима переиндексация (reindexDataJob).

Перед миграцией данных из 5.x в 6.x необходимо:

  1. Подготовить данные в 5.x к миграции. Например, сменить тип хранения данных:

    • Параметр unidata.dump.target.format сменить с JAXB на PROTOSTUFF.

    • Экспортировать данные из 5.x.

    • После экспорта удалить физически данные из 5.x.

    • Импортировать данные обратно в 5.x.

  2. В 6.x запустить операцию миграции.

  3. После завершения миграции в 6.x запустить переиндексацию данных.

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

  • Имя пользователя (поле ввода). Логин учетной записи, используемый для операции.

  • URL базы данных (поле ввода). URL базы данных, из которой производится миграция. Пример: jdbc:postgresql://10.10.0.255:5432/unidata_5x?user=postgres&password=secretPass&currentSchema=public&ApplicationName=Unidata-Migrate

  • Перенести все ревизии данных (флаг). Если включен, то загружаются все данные (origin_vistory) по связям и записям, кроме статусов. Если выключен, то загружаются только актуальные данные, т.е. попадающие в активную зону периодов актуальности.

  • Размер блока (поле ввода). Размер блока загружаемых данных. По умолчанию 512.

Примечания:

  • Операция переносит только объекты БД.

  • Записи не сохраняются в индекс, поэтому после переноса нужен запуск операции переиндексации (reindexDataJob).

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

  • Если в 6.х имеются ключи, которые мешают вставке, то могут возникнуть ошибки.

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

  • Количество потоков операции регулируется параметром backend.properties (применяется со стартом сервера). Параметр com.unidata.mdm.job.migrate.data.threads.

  • Когда в параметрах операции выбрана опция "Migrate all data revisions", то загружаются все данные по связям и записям, кроме статусов:

    • origins_vistory.status - 'MERGED'

    • origins_vistory.approval - 'DECLINED'

    • origins_vistory.approval - 'PENDING'

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

Операция запускается при необходимости. В случае, если необходимо перенести данные из БД в MDM 5.x в MDM 6.х.

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

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

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

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

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

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

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

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

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

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