Хранилище версий объектов в условиях массовых изменений

08.11.20

База данных - Чистка данных

Проблема хранения версий объектов при огромном количестве изменений.

Первая публикация... она растянулась на несколько лет...

Вступление

В 2016 году я устроился на работу в одну достаточно известную в нашей стране компанию (не франч и даже не IT) на должность 1С разработчика. Основная деятельность компании - оптовая торговля, по мимо этого компания занималась и другими направлениями, документооборот - не сколько сотен тысяч документов в год... Конфигурация используемая на предприятии самописная, за основу взяли УТ 10.3 и потом пошло поехало... сейчас что то типового там днём с огнём не сыщешь... 

Шло время и количество пользователей увеличивалось, как и число 1С разработчиков. Базы данных росли как на дрожжах, с каждым годом количество документов становилось все больше и больше, пользователи все чаще многократно корректировали свои документы, программисты внося изменения в конфигурацию все чаще меняли документы чтобы получить нужный результат для выполнения задачи (добавление новых реквизитов, измерений в регистрах и заполнение данных в документах старого периода и т.д.)... Настал тот момент, когда копии разворачивались очень долго, обслуживание базы скриптами длилось уже гораздо дольше прежнего, в результате анализа размера таблиц БД выяснилось что основной "камень на шее" это регистр сведений "Версии объектов", о нём и пойдёт речь в данной публикации.

Большие данные

Регистр сведений "Версии объектов" занимал несколько сотен ГБ, он не чистился с момента перехода компании на новую конфигурацию и был "жизненно" необходим многим пользователям, с помощью него расследовались спорные ситуации по изменениям документов и справочников, исправлялись ошибки... В общем стало понятно, что просто так взять и почистить не получится, а так хотелось:) 

Пользователи работали в разных БД на основе одной конфигурации - две базы разных структурных подразделений для работы "рядовых" пользователей, отельная база для другого направления деятельности и база для аналитики - куда были вынесены сложные и ресурсоёмкие расчеты - закрытия месяца и т.д. И это все не просто жило жизнью "сильной и не зависимой женщины", а так или иначе обменивалось данными с регулярной периодичностью – через планы обмена и веб сервисы, изменения в одной базе выгружались в остальные или если этого не требовалось то не выгружались… Пользователь в рамках одной базы знал про изменения и видел следующую картину

 

Кто то внес изменения в другой базе и к нему это пришло с обменом, но чтобы найти «виновника» нужно зайти в базу где эти изменения произошли – чтобы этого избежать напрашивалась централизация сбора версий…

Отрицательный опыт это тоже опыт

Чтобы не изобретать велосипед и тратить время на разработку технической истории решили вложится с продукт стороннего разработчика, по описанию казалось как раз тем что нам нужно. Продукт был куплен, написали обработку для сериализации наших версий в формат нового продукта и пошел процесс начального заполнения…. Продукт хранил версии раскладывая их по реквизитам, а не как у нас в сериализованном виде XML. База Хранилища заполнялась крайне медленно и её размер уже превышал размер самой базы источника, и это было только начало, версии остальных баз решено было не загружать так как «бочка» оказалась не бездонной – стал еле ворочаться на сервере заняв все его ресурсы и медленно отвечать на запросы в получении произошедших с объектом изменений.

Хочешь сделать хорошо – сделай сам

Решать проблему было надо и другого пути, чтобы максимально быстро это сделать на горизонте не намечалось. Итак появилась конфигурация «Хранилище версий» на платформе всем известной 1С... да можно было для этого использовать иные продукты типа Elasticsearch, но… что сделано то сделано…

Выглядит интеграция «Хранилища версий» следующим образом:

3 рабочих базы и 1 аналитическая служат первоисточником получения данных по версиям. При изменении объекта версия пишется в саму базу источник, затем регламентно по веб сервису хранилище забирает порциями версии объектов, перед записью предварительно сравнивает контрольные суммы версий – для того чтобы определить произошли ли какие то изменения или объект был записан без изменений. Если изменения имели место быть то версии присваивается номер и она записывается в базу хранилища.

Структура регистра для хранения версий:

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

Ускоряемся

Эволюционируем и переходим к более быстрым технологиям обмена данными - передаче и получению версий объектов через брокер сообщений Rabbit MQ. Используя компоненту YellowRabbit передаем из баз источников версии в хранилище (почти в онлайн режиме), версии уже не хранятся временно в базах - при записи объекта версия пишется в сообщение для брокера и уже через секунду оно отправляется в брокер, при получении версий в хранилище выполняется аналогичный алгоритм проверки контрольной суммы. 

Для получения версий также используем Rabbit MQ - с помощью асинхронного вызова делаем запрос к хранилищу и получаем данные по версиям объекта... 

Спасибо, что уделили время;)

Версии хранилище изменения чистка

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:ERP. Управление холдингом Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    4227    24    14    

37

Чистка данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Позволяет удалить организации из любых из информационных баз 1С на управляемых формах (БП 3.0, УТ 11, КА 2, ERP 2, ЗУП 3.0, УНФ, Розница 2.0 и пр.). Главное требование - программа должна содержать справочник "Организации". Реализован самый быстрый алгоритм непосредственного удаления объектов. Работает даже на базах большого размера. Для ускорения работы алгоритма не запускается проверка контроля ссылочной целостности. Проверку учета можно запустить отдельно с помощью дополнительной обработки. Необходимо перед удалением самостоятельно проверить базу на наличие перекрестных ссылок разных организаций в одном документе. Эту дополнительную обработку проверки перекрестных ссылок по запросу предоставляем бесплатно нашим покупателям.

3582 руб.

16.03.2015    159120    203    77    

238

Чистка данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 10 1С:Управление торговлей 11 Платные (руб)

Данные обработки помогут Вам легко и, главное быстро, выполнить удаление любых данных в Ваших базах 1С на платформах 8.1-8.3. Обработки помогут легко просмотреть связи ссылок в виде дерева, выбрать что удалять, а что нет, используя любые отборы. Это позволит уменьшить объем лишней и не нужной информации в справочниках и документах, планах видов характеристик и др. объектах и облегчит работу с данными пользователям и Вам. Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. (Обновление от 29.06.2023, версия 4.2)

9600 руб.

22.02.2013    138089    255    144    

426

Чистка данных Программист Пользователь Платформа 1С v8.3 Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Обработка позволяет удобно и выборочно удалить данные из базы 1С. Это могут быть как неиспользуемые элементы справочников, так и неактуальные организации. При этом есть возможность провести анализ пересечений документов с другими организациями и таким образом уберечься от того, что при удалении обороты по другой организации изменятся.

3350 руб.

28.11.2019    25652    57    16    

72

Чистка данных Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если в вашей информационной базе крутится очень много данных, или база должна быть доступна 24/7 (как в моем случае), или же вы боитесь запускать тестирование и исправление, НО существует потребность удалить битые ссылки, тогда эта обработка сможет Вам помочь. Обработка выявляет битые ссылки как в самих объектах метаданных, так и в их табличных частях(!), а так же может их удалить.

2400 руб.

23.08.2021    9792    18    3    

24

Оптовая торговля Логистика, склад и ТМЦ Чистка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Если вы начали работать в программном продукте Управление Торговлей, редакция 11 или Комплексная Автоматизация редакция 2 и включили механизм учёта серий, то перейти обратно в учёт без серий будет не так-то просто. Сложность заключается в том, что нужно очистить серии в табличной части документа, например, Реализация Товаров и услуг. Предлагаем алгоритм перехода на учет без серий для программного продукта УТ11. (Очистка серий.)

2400 руб.

09.04.2019    28932    42    14    

44

Чистка данных Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

21.01.2022    7616    0    dmbal    6    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 96 12.11.20 09:42 Сейчас в теме
Регистр сведений "Версии объектов" занимал несколько сотен ГБ, он не чистился с момента перехода компании на новую конфигурацию и был "жизненно" необходим многим пользователям, с помощью него расследовались спорные ситуации по изменениям документов и справочников, исправлялись ошибки... В общем стало понятно, что просто так взять и почистить не получится, а так хотелось:)

Достаточно "старая" версия объекта как правило не актуальна и периодически удаляется, а где-то удаляется из БД + куда-то бэкапится на всякий.
Можно ещё удалить дубли версий.
2. Punisher_1C 14 13.11.20 11:51 Сейчас в теме
(1)
Достаточно "старая" версия объекта как правило не актуальна и периодически удаляется, а где-то удаляется из БД + куда-то бэкапится на всякий.

да, собственно это и делает хранилише версий - забирает из рабочих баз версии к себе на хранение

Можно ещё удалить дубли версий.

А их по сути нет, при записи версий производиться сравнение - изменились данные или нет, если данные не менялись то версия не пишется(не дублируется)
triviumfan; +1 Ответить
3. DrAku1a 1740 15.11.20 18:26 Сейчас в теме
Прошу прощения, что излишне наезжаю, не по теме, но "несколько" и "независимый" - пишутся слитно.

По самой статье: Если Вы всё-равно делаете сравнение версий, то может стоит хранить не всю версию объекта, а только различия. Что-то вроде "патча", чтобы из исходной версии получить новую?.. Обычно, изменяется один-два реквизита...

Возможно, также, имеет смысл рассмотреть сжатие однотипных данных. Но тогда желательно хранить все версии в одном реквизите. Это увеличит время как чтения, так и записи, но сильно сократит размер.
4. Punisher_1C 14 16.11.20 10:33 Сейчас в теме
Прошу прощения, что излишне наезжаю, не по теме, но "несколько" и "независимый" - пишутся слитно.

спасибо, действительно допустил ошибку

Если Вы всё-равно делаете сравнение версий, то может стоит хранить не всю версию объекта, а только различия. Что-то вроде "патча", чтобы из исходной версии получить новую?.. Обычно, изменяется один-два реквизита...

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

Но так очень сложно делать сравнение версий - допустим сравнить 3 и 15 версии, для этого придется собирать все изменения, так как значения измененные в ранее 15 версии могут быть не отражены в отчете по сравнению - для пользователей скорость формирования отчета крайне критична. Возьмём документ Реализация с 60 реквизитами и 4 табличными частями, сравнение 2х версий будет гораздо быстрее чем сбор всей цепочки версий для поиска изменений
Оставьте свое сообщение