Сжатие данных версионирования #655160


#0 by Maxus43
Приветствую! В типовой УПП есть код, суть проста - сжимает данные в версионировании. Вопрос - почему именно в запросе вытягивает поле ВерсияОбъекта, т.е. само хранилище значения? Ведь если переделать: ....        ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных); .... то не надо будет тянуть в запросе. Дело вобще в том, что данный код "справляется" только с небольшими объёмами. Например вытянуть 500 тысяч несжатых записей уже валится. С доработкой - ему будет без разницы на объём. Почему именно так сделано? есть тайный смысл?
#1 by ДенисЧ
А зачем регламенту тянуть 500000 записей? Он в теории каждую нощь должон проходить.
#2 by H A D G E H O G s
Пока Истина Цикл Выбрать Первые 500
#3 by Fragster
на самом деле надо хранить отдельно метаданные версий, отдельно хранилище с массивом со всеми версиями - тогда оно будет сжато намного эффективнее, чем если много отдельных хранилищ
#4 by Fragster
правда тогда надо распаковывать все версии когда одну надо получить...
#5 by Живой Ископаемый
этот регистр по-моему специально таким стремным сделан, у меня например большие сомнения в том что стоило датуверсии реквизитом а не измерением, тем более без индекса
#6 by Maxus43
Это всё вы правильно, меня интересует сам Запрос, ну нахрена тянуть в нём хранилище значения? Если ниже всё равно есть конструкция Прочитать - по сути и подтягивает хранилище
#7 by Maxus43
на больших объёмах данных сказывается, запрос очень долго выполняется, да и падает если совсем невмоготу
#8 by Maxus43
Как оптимизировать - понятно... ну это же типовое)
#9 by Maxus43
в этом и трабл. Регл задание было ограничено по времени, а т.к. запрос выполняется Долго из-за этого ненужного там поля - не всё успевал сжать, в итоге за полгода скопилось
#10 by Maxus43
Может я неправильный какой-то, но щетаю что код должен работать с учетом всяких форсмажоров, а не придерживаясь принципа "ну должно же быть меньше данных". Ошибку кто в запросе видит? или это специально сделано? тянуть хранилище значений
#11 by Fragster
ну ладно, переделай у себя.
#12 by H A D G E H O G s
Я не вижу
#13 by H A D G E H O G s
Ну можно диапазонами сделать.
#14 by H A D G E H O G s
А вообще - попробуйте новый файл в архив ZIP добавить - он его с нуля пересожмет, так как ему словарь надо обновить и нужен цельный поток.
#15 by Maxus43
может понимаешь глубинный смысл дёргать хранилище запросом? учитывая что ниже всё равно идёт чтение менеджера записей, и де факто чтение этого самого хранилища?
#16 by Fragster
да, но 10 похожих XML очень похожи на 1 XML в архиве
#17 by Maxus43
эт логично, учитывая алгоритмы сжатия и внутренности XML
#18 by Fragster
соответственно, 100 версий от одной  не сильно должны отличаться по размеру, когда они в одном архиве.
#19 by Maxus43
как делить общее хранилище будешь на независимые объекты для сериализации? хранить в хранилище структуру объектов?
#20 by H A D G E H O G s
А, все, вижу.
#21 by Maxus43
самое обидное что эта хрень в разы замендляет запрос. Понятно что ноги растут из-за того что "не следили за базой" в версионировании, но ошибка логическая в коде помойму очевидна....
#22 by Fragster
добавить пакет
#23 by Fragster
XDTO
#24 by H A D G E H O G s
Тоесть?
#25 by Maxus43
в одном пакете можно хранить несколько объектов
#26 by Maxus43
хотя хз, надо проверять...)
#27 by H A D G E H O G s
Ну я и говорю, диапазоны.
#28 by Fragster
Элемент с реквизитом типа anyType и maxOccurs unbounded, храни сколько хочешь чего хочешь
#29 by Fragster
единственное, при изменении структуры метаданных - будет косяк
#30 by olegves
я себе допилил сохранение версии, очищая значения для полей с типом ХЗ. Все одно эти значения не сравниваются при сравнении версий
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С