|
Сжатие данных версионирования | ☑ | ||
---|---|---|---|---|
0
Maxus43
05.03.13
✎
15:08
|
Приветствую!
В типовой УПП есть код, суть проста - сжимает данные в версионировании. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Объект, НомерВерсии, ВерсияОбъекта | ИЗ РегистрСведений.ВерсииОбъектов | ГДЕ УдалитьСжато = Ложь"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ДвоичныеДанные = Выборка.ВерсияОбъекта.Получить(); ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписиВерсииОбъектов.Объект = Выборка.Объект; МенеджерЗаписиВерсииОбъектов.НомерВерсии = Выборка.НомерВерсии; МенеджерЗаписиВерсииОбъектов.Прочитать(); МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; МенеджерЗаписиВерсииОбъектов.УдалитьСжато = Истина; МенеджерЗаписиВерсииОбъектов.Записать(); КонецЦикла; Вопрос - почему именно в запросе вытягивает поле ВерсияОбъекта, т.е. само хранилище значения? Ведь если переделать: .... МенеджерЗаписиВерсииОбъектов.Прочитать(); ДвоичныеДанные = МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта.Получить(); ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); .... то не надо будет тянуть в запросе. Дело вобще в том, что данный код "справляется" только с небольшими объёмами. Например вытянуть 500 тысяч несжатых записей уже валится. С доработкой - ему будет без разницы на объём. Почему именно так сделано? есть тайный смысл? |
|||
1
ДенисЧ
05.03.13
✎
15:11
|
А зачем регламенту тянуть 500000 записей?
Он в теории каждую нощь должон проходить. |
|||
2
H A D G E H O G s
05.03.13
✎
15:13
|
Пока Истина Цикл
Выбрать Первые 500 |
|||
3
Fragster
гуру
05.03.13
✎
15:13
|
на самом деле надо хранить отдельно метаданные версий, отдельно хранилище с массивом со всеми версиями - тогда оно будет сжато намного эффективнее, чем если много отдельных хранилищ
|
|||
4
Fragster
гуру
05.03.13
✎
15:14
|
правда тогда надо распаковывать все версии когда одну надо получить...
|
|||
5
Живой Ископаемый
05.03.13
✎
15:14
|
этот регистр по-моему специально таким стремным сделан, у меня например большие сомнения в том что стоило датуверсии реквизитом а не измерением, тем более без индекса
|
|||
6
Maxus43
05.03.13
✎
15:40
|
Это всё вы правильно, меня интересует сам Запрос, ну нахрена тянуть в нём хранилище значения? Если ниже всё равно есть конструкция Прочитать() - по сути и подтягивает хранилище
|
|||
7
Maxus43
05.03.13
✎
15:41
|
на больших объёмах данных сказывается, запрос очень долго выполняется, да и падает если совсем невмоготу
|
|||
8
Maxus43
05.03.13
✎
15:42
|
(2) Как оптимизировать - понятно... ну это же типовое)
|
|||
9
Maxus43
05.03.13
✎
15:44
|
(1) в этом и трабл. Регл задание было ограничено по времени, а т.к. запрос выполняется Долго из-за этого ненужного там поля - не всё успевал сжать, в итоге за полгода скопилось
|
|||
10
Maxus43
05.03.13
✎
15:47
|
Может я неправильный какой-то, но щетаю что код должен работать с учетом всяких форсмажоров, а не придерживаясь принципа "ну должно же быть меньше данных".
Ошибку кто в запросе видит? или это специально сделано? тянуть хранилище значений |
|||
11
Fragster
гуру
05.03.13
✎
15:48
|
(10) ну ладно, переделай у себя.
|
|||
12
H A D G E H O G s
05.03.13
✎
15:51
|
(10) Я не вижу
|
|||
13
H A D G E H O G s
05.03.13
✎
15:52
|
(3) Ну можно диапазонами сделать.
|
|||
14
H A D G E H O G s
05.03.13
✎
15:54
|
(3) А вообще - попробуйте новый файл в архив ZIP добавить - он его с нуля пересожмет, так как ему словарь надо обновить и нужен цельный поток.
|
|||
15
Maxus43
05.03.13
✎
15:55
|
(12) может понимаешь глубинный смысл дёргать хранилище запросом? учитывая что ниже всё равно идёт чтение менеджера записей, и де факто чтение этого самого хранилища?
|
|||
16
Fragster
гуру
05.03.13
✎
15:56
|
(14) да, но 10 похожих XML очень похожи на 1 XML в архиве
|
|||
17
Maxus43
05.03.13
✎
15:56
|
(16) эт логично, учитывая алгоритмы сжатия и внутренности XML
|
|||
18
Fragster
гуру
05.03.13
✎
15:57
|
(17) соответственно, 100 версий от одной не сильно должны отличаться по размеру, когда они в одном архиве.
|
|||
19
Maxus43
05.03.13
✎
16:00
|
(18) как делить общее хранилище будешь на независимые объекты для сериализации? хранить в хранилище структуру объектов?
|
|||
20
H A D G E H O G s
05.03.13
✎
16:01
|
(15) А, все, вижу.
|
|||
21
Maxus43
05.03.13
✎
16:03
|
(20) самое обидное что эта хрень в разы замендляет запрос.
Понятно что ноги растут из-за того что "не следили за базой" в версионировании, но ошибка логическая в коде помойму очевидна.... |
|||
22
Fragster
гуру
05.03.13
✎
16:03
|
(19) добавить пакет
|
|||
23
Fragster
гуру
05.03.13
✎
16:03
|
XDTO
|
|||
24
H A D G E H O G s
05.03.13
✎
16:04
|
(23) Тоесть?
|
|||
25
Maxus43
05.03.13
✎
16:05
|
(24) в одном пакете можно хранить несколько объектов
|
|||
26
Maxus43
05.03.13
✎
16:06
|
хотя хз, надо проверять...)
|
|||
27
H A D G E H O G s
05.03.13
✎
16:06
|
(25) Ну я и говорю, диапазоны.
|
|||
28
Fragster
гуру
05.03.13
✎
16:11
|
Элемент с реквизитом типа anyType и maxOccurs unbounded, храни сколько хочешь чего хочешь
|
|||
29
Fragster
гуру
05.03.13
✎
16:11
|
единственное, при изменении структуры метаданных - будет косяк
|
|||
30
olegves
05.03.13
✎
16:14
|
(21) я себе допилил сохранение версии, очищая значения для полей с типом ХЗ. Все одно эти значения не сравниваются при сравнении версий
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |