При организации витрин данных, например для аудиторов или внешних консультантов, часто возникает задача выделить из общей информационной базы (содержащей учет по десяткам юридических лиц) данные только по одной организации и поддерживать их в актуальном состоянии с определенной периодичностью. Разберем технические нюансы, возможные архитектурные решения, а также подводные камни, связанные с блокировками данных и ссылочной целостностью.
Первое решение, которое часто рассматривают разработчики, — это создание подчиненного узла РБД с отбором по организации в плане обмена. Однако на практике такой подход сопряжен с рядом критических особенностей, которые необходимо учитывать.
Рассмотрим, с какими сложностями можно столкнуться при использовании РБД:
Организация (например, справочники статей затрат, номенклатуры, регистры учета затрат). Без явного описания логики миграции зависимых данных в подчиненной базе появятся битые ссылки (объект не найден).ПланыОбмена.ВыбратьИзменения() или записи новых данных СУБД может накладывать блокировки уровня страниц или всей таблицы изменений, что способно приводить к таймаутам и взаимным блокировкам (deadlocks) у пользователей, работающих в рабочей базе по другим организациям.Если выбран вариант с обменом через планы обмена, проанализируем способы минимизации блокировок:
ПередЗаписью или ПриЗаписи нужный узел плана обмена добавляется в коллекцию адресатов только при соответствии условию:
Если Источник.Организация = УзелОбмена.Организация Тогда
Источник.ОбменДанными.Получатели.Добавить(УзелОбмена);
КонецЕсли;
Такой подход исключает регистрацию лишних записей для других 29 организаций и снижает нагрузку на системные таблицы регистрации.
Рассмотрим вариант создания отдельного плана обмена без признака распределенной информационной базы. Обмен данными настраивается с помощью правил конвертации данных (КД) или HTTP-сервисов.
Разберем преимущества этого подхода:
Если база-витрина требуется исключительно для чтения (например, для проверки аудиторами раз в неделю), наиболее надежным и простым решением является работа с полной копией базы, созданной средствами СУБД во внерабочее время.
Разберем по шагам схему реализации:
Выясним причину, почему вариант с бэкапом и RLS часто предпочтительнее: он полностью исключает риск деградации производительности основной рабочей базы, не требует поддержки сложных правил обмена и исключает проблему появления битых ссылок при сложных перекрестных движениях по регистрам.