Миграция документов и справочников между стендами Directum RX

Следующий проект

На проектах внедрения Directum RX инфраструктура заказчика может состоять из нескольких стендов. Например, тестовый стенд, пре-прод и т.д. Соответственно поддержание актуальности данных между этими стендами может потребовать дополнительных трудозатрат у команд исполнителя и заказчика.

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

 

Задача

Разработать решение переноса сущностей документов и справочников между двумя стендами Directum RX без потери данных, обеспечить универсальность и удобство настройки параметров переноса данных. Также решение должно содержать актуальную информацию о текущем процессе миграции данных и возможных ошибках.

 

Решение

Для решения поставленной задачи был разработан модуль «Миграция данных». Он содержит справочники, в которых хранятся настройки миграции, информация о ходе миграций, и асинхронные обработчики для выполнения миграции.

Справочники модуля:

  • Миграции
  • Отпечатки зависимостей
  • Отпечатки сущностей
  • Настройки модуля Миграции данных
  • Статусы миграции
  • Ошибки миграции
  • Авторизации

 

Описание объектов модуля

Настройки модуля Миграция данных

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

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

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

 


Рисунок 1. Карточка справочника Настройки модуля Миграция данных.

 

Отпечатки зависимостей

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

Сбор / обновление данных осуществляет действе списка. Учитываются настройки модуля – исключения, указанные пользователем обрабатываться не будут.

 


Рисунок 2. Карточка справочника Отпечатки зависимостей.

 

Отпечатки сущностей

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

 


Рисунок 3. Карточка справочника Отпечатки сущностей.

 

Авторизации

Вспомогательный справочник. Содержит данные для авторизации и информацию базы данных конечного стенда. Данный справочник, при необходимости, позволяет настроить авторизацию к нескольким стендам.

 


Рисунок 4. Карточка справочника Авторизации.

 

Миграции

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

 


Рисунок 5. Карточка справочника Миграции.

 

Дополнительные справочники

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

 

Схема работы и особенности решения

Для корректной работы решения, разработка на стендах должна быть идентична.

Для миграции данных между стендами администратор модуля должен выполнить следующие действия:

  1. Собрать информацию по всем документам и справочникам (справочник «Отпечатки зависимостей» и «Отпечатки сущностей»).
  2. Выбрать типы или сущности для переноса (справочник «Миграции»).
  3. Определить все зависимые типы сущности.
  4. Проверить приоритет переноса для выбранных и зависимых типов.
  5. Запустить миграцию документов и справочников на указанный стенд.

 


Рисунок 6. Схема работы решения.

 

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

Основной идеей решения является то, что объекты переносятся с использованием метаданных выбранного типа. Серверный код не обращается напрямую к экземплярам сущности. Решение не зависит от архитектуры исходного решения. Такой подход позволяет разработанному решению быть гибким в настройке и не требовать доработок после импорта на стенд.

Важной особенностью решения является автоматический сбор данных по всем типам, от которых зависит выбранный объект. Это позволяет выстроить правильный порядок и обеспечить корректность переноса данных.

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

 

Особенности разработки

По итогам разработки решения мы столкнулись с множеством нетривиальных задач:

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

 

Результат

По результатам разработки решения были достигнуты следующие цели:

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

 

Планы по развитию

Внедрить механизм добавления зависимостей, присутствующих в серверных методах и событиях типов сущности.

Комментарии (2)

Добрый день, хочу поинтересоваться, с помощью чего вы смогли реализовать получение справочников? (то есть базовые справочники и справочники реализованные на прикладном уровне по которым будет выполняться экспорт).

Николай Иванов

Всеволод, при сборе данных (формировании записей справочника "Отпечатки зависимостей") используется таблица БД "Sungero_System_EntityType". По значению колонки "typeguid" получаем метаданные типа и родительские метаданные. Если родительские метаданные содержат ссылку на "Sungero.CoreEntities.IDatabookEntry" тип является справочником.

// Метаданные родителя.
var databookTypeMeta = typeof(Sungero.CoreEntities.IDatabookEntry).GetEntityMetadata();
// Получить метаданные сущности (из таблицы).
var meta = entityType.GetEntityMetadata();
// Получить ВСЕ родительские сущности.
var parentMetas = meta.GetParentTypesMetadata();
bool isBook = parentMetas.Any(p => p.Equals(databookTypeMeta));

При создании записи справочника "Миграции" используются записи "Отпечатки зависимостей".
Вобщем отправная точка - таблица "Sungero_System_EntityType".

Авторизуйтесь, чтобы написать комментарий

У вас похожая задача?

Обсудите реализацию с экспертом Directum

Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле

Благодарим за интерес! Мы свяжемся с вами.

Directum Awards 2024
Какой проект лучше?
Авторизуйтесь, чтобы оценить материал.
Авторизуйтесь, чтобы оценить материал.
Directum Awards 2024
Спасибо за активность!
Ваш голос принят