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

08.11.20

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

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

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

Вступление

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

Ускоряемся

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

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

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

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

См. также

Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0

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

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

9600 руб.

22.02.2013    135917    248    144    

418

Универсальное выборочное удаление данных из базы 1С (любые конфигурации на упр.формах: БП 3.0, УТ 11, КА 2, ERP, УНФ, ЗУП 3, Розница и т.д.)

Чистка данных Платформа 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    24312    46    16    

58

SALE! 10%

Выборочное удаление организаций из баз (управляемые формы), с удалением всех ссылающихся на эти организации данных

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

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

3980 3582 руб.

16.03.2015    113707    181    75    

217

Замена Номенклатуры+Характеристики

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

Настраиваемая обработка, позволяющая заменить пару: Номенклатура+Характеристика в документах, их движениях и независимых регистрах сведений. Без перепроведения. Поможет, если вы по каким-то причинам решили отказаться от характеристик

3600 руб.

04.08.2015    41111    88    70    

49

Удаление битых ссылок 1С в базе без монопольного режима

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

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

2400 руб.

23.08.2021    9260    15    3    

20

Очистка дублей в синхронизированных базах (УТ, БП, РТ, УНФ)

Чистка данных Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3960 руб.

27.06.2018    18807    10    3    

15

Очистка регистров сведений от записей по помеченным на удаление элементам

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

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

1200 руб.

21.01.2022    7125    5    6    

9

Очистка кэша 1С. Исполнитель

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

Очередная вариативная очистка кэша 1С с помощью Исполнителя 3.0.2.2.

1 стартмани

25.10.2023    4531    4    SerVer1C    25    

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

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

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

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

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

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

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

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

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

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

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