На проектах внедрения Directum RX инфраструктура заказчика может состоять из нескольких стендов. Например, тестовый стенд, пре-прод и т.д. Соответственно поддержание актуальности данных между этими стендами может потребовать дополнительных трудозатрат у команд исполнителя и заказчика.
Чтобы решить данную задачу, например, можно воспользоваться переносом базы данных одного стенда на другой. В таком случае данные базы источника полностью заменяют данные базы назначения, и команда заказчика потеряет ценные данные для тестирования.
Разработать решение переноса сущностей документов и справочников между двумя стендами Directum RX без потери данных, обеспечить универсальность и удобство настройки параметров переноса данных. Также решение должно содержать актуальную информацию о текущем процессе миграции данных и возможных ошибках.
Для решения поставленной задачи был разработан модуль «Миграция данных». Он содержит справочники, в которых хранятся настройки миграции, информация о ходе миграций, и асинхронные обработчики для выполнения миграции.
Справочники модуля:
Справочник предназначен для настройки процессов миграции, позволяющий:
Добавление исключения к настройкам миграции уменьшает время сбора информации для переносимых типов и время выполнения операций.
Рисунок 1. Карточка справочника Настройки модуля Миграция данных.
Записи справочника содержат актуальную информацию (на момент сбора данных) касаемо всех ссылочных свойств типа сущности, ссылающихся на документы и справочники, учитываются свойства коллекций.
Сбор / обновление данных осуществляет действе списка. Учитываются настройки модуля – исключения, указанные пользователем обрабатываться не будут.
Рисунок 2. Карточка справочника Отпечатки зависимостей.
Записи справочника содержат актуальную информацию (на момент сбора данных) касаемо всех сущностей документов и справочников стенда. По действию Показать можно перейти к сущности. Сбор / обновление данных осуществляет аналогично записям Отпечатки сущностей. Является вспомогательным – объединяет все нужные документы и справочники в один репозиторий.
Рисунок 3. Карточка справочника Отпечатки сущностей.
Вспомогательный справочник. Содержит данные для авторизации и информацию базы данных конечного стенда. Данный справочник, при необходимости, позволяет настроить авторизацию к нескольким стендам.
Рисунок 4. Карточка справочника Авторизации.
Данный справочник позволяет выбрать типы сущностей для переноса и использует информацию вышеописанных справочников. Записи Отпечатки зависимостей позволяют автоматически выбрать все зависимые типы и установить приоритет переноса. Также есть возможность переноса отдельных сущностей. Записи Отпечатки сущностей предоставляют список всех справочников стенда без явной привязки к типу (исключает фактор отсутствия общего репозитория для справочников), а также документов.
Рисунок 5. Карточка справочника Миграции.
Для организации хранения истории работы процессов миграции, а также хранению информации о возникающих ошибках были разработаны два справочника Статусы миграции и Ошибки миграции. Подход позволил в удобной форме предоставить информацию пользователю, производящему работы, следить за состоянием процесса, а также при необходимости провести анализ по выявленным проблемам процесса миграции.
Для корректной работы решения, разработка на стендах должна быть идентична.
Для миграции данных между стендами администратор модуля должен выполнить следующие действия:
Рисунок 6. Схема работы решения.
При выполнении миграции синхронизация объектов между стендами происходит по имени объекта. Если экземпляр типа не найден, он будет создан. Иначе, в зависимости от настроек, экземпляр типа может быть обновлен или оставлен без изменений.
Основной идеей решения является то, что объекты переносятся с использованием метаданных выбранного типа. Серверный код не обращается напрямую к экземплярам сущности. Решение не зависит от архитектуры исходного решения. Такой подход позволяет разработанному решению быть гибким в настройке и не требовать доработок после импорта на стенд.
Важной особенностью решения является автоматический сбор данных по всем типам, от которых зависит выбранный объект. Это позволяет выстроить правильный порядок и обеспечить корректность переноса данных.
Также при работе решения используются запросы для очистки временной информации в базе данных приемника. Производится очистка информации о сессиях, без этого решения возникает ошибка о превышении количества лицензий.
По итогам разработки решения мы столкнулись с множеством нетривиальных задач:
По результатам разработки решения были достигнуты следующие цели:
Внедрить механизм добавления зависимостей, присутствующих в серверных методах и событиях типов сущности.
Опубликовано:
28 марта в 13:16
Обсудите реализацию с экспертом Directum
Комментарии (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".