gifts2017

Вынесение регистра версий из базы

Опубликовал Осипов Сергей (fixin) в раздел Обработки - Свертка базы

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

 

По замерам в SQL-сервере при общем объеме базы 286 Гб размер таблицы регистра версий стал 129, т.е. 45%.

 

Сначала я хотел перенести в отдельную SQL-базу через «чистый SQL», но потом решил, что написание примитивного кода переноса будет быстрее и сопровождать легче.

 

В итоге за 2 часа рабочего времени написал структуру базы и обработку, которая переносит регистр из рабочей базы в отдельную. Обработка и база в формате 8.2

 

Конфигурация базы версий

В конфигурации всего несколько справочников:

  • Типы – типы данных, синхронизируются по полному имени метаданных.
  • Узлы обмена – узел обмена, из которого пришла версия, синхронизируется по коду.
  • Авторы – авторы версий, синхронизируются по наименованию.

 

Регистр версий имеет структуру:

 

Я добавил только ресурс «Дата добавления», чтобы отслеживать, когда версия была перенесена в базу версий.

Объект – это значение типа «Уникальный идентификатор», является ссылкой на объект в исходной базе.

От замысла хранить версии из нескольки баз в одной базе версий отказался – отдельные базы проще в обслуживании.

 

Заполненный данными регистр версий в базе версий выглядит так:

 

Заполненный список типов выглядит так:

 

Заполненный список авторов выглядит так:

 

Обработка для переноса

Обработка имеет  простую форму:

Используется обычно по расписанию для запуска из регламентного задания:

 

О = САП.ДатьВнешнююОбработку("Перекачка версий в базу версий");

 

О.ВыбСервер = "server";

О.ВыбБаза = "VersRT";

О.ВыбПользователь = "robot";

О.ВыбПароль = "1111111111111";

 

О.Работа();

 

Перенесенные версии удаляются из базы данных.

Использование в отчетах рабочей базы

Версии использовались только в отчете по показу версий объекта. Вместо обращения к рабочей базе нужно переписать код для обращения к базе версий по COM-соединению. Остальное не меняется. Это просто.

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка и конфигурация
.zip 12,17Kb
01.10.14
4
.zip 12,17Kb 4 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Николай Терновой (ojiojiowka) 02.10.14 11:03
А не пробовали таблицу вынести в отдельную файловую группу?
2. Осипов Сергей (fixin) 02.10.14 12:12
(1) вынесение не решит мою проблему. Эта таблица по прежнему будет частью базы и будет пересчитываться при каждой реструктуризации, переиндексации и т.п.
3. Анна Б (AnnB) 02.10.14 12:41
Мы очищаем регистр версий, храним только версии текущего года. По суди история изменений закрытого периода нам не нужна.
4. Осипов Сергей (fixin) 02.10.14 12:59
(3) тоже вариант. но у нас сложности с закрытием перидов, неизвестно, что когда может понадобиться.
5. Александр Капустин (kapustinag) 02.10.14 14:22
(3) AnnB, У нас версии объектов очень редко смотрят, но уж если смотрят, то историю за несколько лет поднимают. То есть 99.99% объема регистра лежит и никогда не будет востребовано, но ради 0.01% приходится это все где-то хранить.

Вариант с отдельной базой - хороший. Есть еще другой вариант - хранить версии на файловом ресурсе. Отчет "История изменений объектов" может быть легко доработан и для этого случая. Структуру вложенных каталогов надо сделать, чтобы проводник Windows нормально с ней работал.
6. Осипов Сергей (fixin) 02.10.14 16:11
(5) я сперва тоже подумал хранить в файлах, но потом передумал. Все-таки это 3 млн файлов. Неэффективно. В базе компактнее хранится. В базу версий кидаю сразу упакованным со степенью сжатия 9.
7. Александр Медведев (anig99) 03.10.14 13:02
У меня такая же база на работе несколько лет уже есть. Только я попроще сделал - храню сразу ссылки на объекты, не создавая лишнего в новой базе. Кроме того добавил перенумерацию и сворачивание версий. А для работы с версиями написан отчет сom... Всё никак руки не доходят причесать и выложить...
8. Осипов Сергей (fixin) 03.10.14 13:55
(7) вот и я исходил из того, что версии занимают слишком много места. Удалять жалко. Вот и перенес их в отдельную базу.
9. Fish249 (fish249) 03.10.14 15:25
А к внешней базе через COM делаешь соединение, или используешь внешние источники данных?
10. Осипов Сергей (fixin) 03.10.14 16:11
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа