Вход | Регистрация

  1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

Механизмы платформенной сериализации

Механизмы платформенной сериализации
Я
   Tateossian
 
12.02.18 - 14:31
​Коллеги, всем привет! Это будет пост для размышления и обсуждения следующей проблемы. Мне не нравятся существующий стек технологий интеграции между 1С. Ни XML/JSON/свойTXT. Ни COM не нравится. Разве что веб-сервисы. Но интересуют именно коробочные, нативные решения. А вот почему. Я являюсь разработчиком на J2EE в нагрузку к 1С и там есть такая технология - встроенная сериализация в binary-формате. Почему 1С не сделает такой? Вот ежли брать классические текстовые форматы - они очень много весят. До упаковки в zip. И долго разбираются парсером. Каждый день ввиду специфики приходится грузить в базу 80Гб xml. Он грузится в 16 фоновых заданий и занимает процесс все равно около 1-1,5 часа. А вот такая проблема - я использую свою систему версионирования. Для хранения ссылок используется метод ЗначениеВСтрокуВнутр(); так как это поле нужно для поиска - оно индексируемое, а лимит на строковый индекс - 442 символа, а бывают отборы на 900 и более строк. Ок, для быстрого поиска я юзаю хэш-ключи, удобно многомерные сущности создавать, эти механизмы ускорили проведение расчета себестоимости с 30 до 5 минут. Но у хэша есть обратная проблема - из жэша нельзя получить искомые сущности. Так вот вопрос: как придумать свою компактную систему сериализации, чтобы быстро работала и весила не много. Может есть готовые советы. FastInfoSet не предлагать. Делал через поток в памяти скрестить с zip архиватором, но там не обойтись без вывода в файл, а нужен быстрый способ чтения/записи, без временных файлов. Какие есть варианты?
 
 
   Tateossian
 
1 - 12.02.18 - 14:32
Сериализация в binary-формате - это обертка объктная на дамп из оперативной памяти.
   Tateossian
 
2 - 12.02.18 - 14:35
Хочу шаред мемори в 1С. Или именованные каналы:)
   cw014
 
3 - 12.02.18 - 14:38
Ваши пожелания по платформе можете оставить на сайте 1С. Все равно их никто не читает :)
   cw014
 
4 - 12.02.18 - 14:39
О каком шаред мемори может идти речь, если они работу с двоичными данными только в 8.3.10 реализовали, и то не полностью?
   Сияющий в темноте
 
5 - 12.02.18 - 14:44
ЗначениеВСтрокуВнутр,это и есть платформенная сериализация,другой пррсто нет
чем вас не устраивают гуиды ссылок,и еще можно записать номер типа ссылки,т.к.типов конечное число
если хочется быстро,то пишем таблицу,и в качестве ссылки пишем номер строки таблицы
   Tateossian
 
6 - 12.02.18 - 14:45
(4) Да-к и об чем речь. Какими костылями это можно исправить?)
   Tateossian
 
7 - 12.02.18 - 14:45
(5) Это нормальная механизма, но она не бинарная. И тяжеловесная...
   PiotrLoginov
 
8 - 12.02.18 - 14:46
(0) >>Каждый день ввиду специфики приходится грузить в базу 80Гб xml. Он грузится в 16 фоновых заданий и занимает процесс все равно около 1-1,5 часа

Так время уходит на передачу этих гигов платйорме 1С, на собственно парсинг платформой строки XML или же, все-таки, на применение полученной из XML информации?
   Tateossian
 
9 - 12.02.18 - 14:46
(5) Я актвино сериализацию xdto юзаю. Нужен формат - типа вот такой текст, но в зип-обертке. Чтобы весил в раза три меньше. И быстро платформой отрабатывался.
   Tateossian
 
10 - 12.02.18 - 14:48
(8) Как ты понимаешь
"Так время уходит на передачу этих гигов платйорме 1С, на собственно парсинг платформой строки XML или же, все-таки, на применение полученной из XML информации?" на все вместе вязтое. Но передача файлов и их запись сущий пустяк, потому что передача идет по Тб каналу, временные файлы распаковываются в ZIP, а на период записи выключаются итоги. Вот именно сам парсинг - слабое место.
 
 Рекламное место пустует
   Cool_Profi
 
11 - 12.02.18 - 14:50
"Каждый день ввиду специфики приходится грузить в базу 80Гб xml"
Надо что-то менять. Или постановку задачи, или постановщика.
   Tateossian
 
12 - 12.02.18 - 14:51
(11) Не надо меня учить:) И умничать тоже не прошу:) А это уже тонкий намек на то, что кто-то где-то не прав.
   Cool_Profi
 
13 - 12.02.18 - 14:52
(12) "это уже тонкий намек на то, что кто-то где-то не прав"
Вот я и намекаю очень тонко - постановщик задачи и разработчик решения - не правы...
   Mort
 
14 - 12.02.18 - 14:54
(0) ЗаписьFastInfoset ?
   Tateossian
 
15 - 12.02.18 - 14:54
(13) Я бы с вами поспорил на месте и послушал ваши аргументы, но сейчас дело не в этом. Хотя я бы не прочь ускорить эти процедуры. А предваряя все вопросы - у нас ФИФО и каждый день база проводится за целый квартал, а это порядка 30000 документов. Как ты понимаешь, база каждый день в идеальном состоянии и не мешает никому работать. Так как в рабочем режиме ты базу не восстановишь по партиям. Ваши аргументы?
   lodger
 
16 - 12.02.18 - 14:55
(11) ну вот нравится людям гонять туда-сюда целую базу данных вместо выработки протокола обмена.
   Tateossian
 
17 - 12.02.18 - 14:56
(14) В этом месте я его не юзаю. Да и практической пользы никакой, ибо при конвертации HEX строку UTF становится больше раза в 1.5-2
   arsik
 
18 - 12.02.18 - 14:56
(0) Может прямо из сиквела минуя 1С?
   Tateossian
 
19 - 12.02.18 - 14:56
(16) Это очень тонкие правила обмена, мсье.
   Cool_Profi
 
20 - 12.02.18 - 14:57
(15) "Ваши аргументы?" 
не проводить её каждый день. Использовать другие механизмы актуализации.
   Tateossian
 
21 - 12.02.18 - 14:57
(18) На нем много уже что реализовано, именно ищется что-то на уровне платформы. Идеальный вариант - это двоичные данные из ЗИП, но перегонка туда-сюда жрет много ЦП.
   Tateossian
 
22 - 12.02.18 - 14:58
(20) Низя не проводить:) Я бы рад, но задача поставлена и она решена. И очень я считаю красиво.
   H A D G E H O G s
 
23 - 12.02.18 - 14:58
(10) "Вот именно сам парсинг - слабое место."

кто-то свиститъ
   Сияющий в темноте
 
24 - 12.02.18 - 14:58
Тогда пишите на Си и пихайте напрямую в Sql
   H A D G E H O G s
 
25 - 12.02.18 - 14:59
80 Гб считываются, и парсятся, ну не скажу так сразу, ну минуты 2-3, не более. Остальное - работа с СУБД.
   Tateossian
 
26 - 12.02.18 - 15:00
(23) О, хэджехог. Дай плиз ссыль на свою поделку, что у окна конфигуратора имя меняет. Все хотел спросить. Я сделал, но на коленке, у тебя лучше)
   Tateossian
 
27 - 12.02.18 - 15:00
(24) Это ад-хок решение будет, а нужны универсальные костыли.
   Tateossian
 
28 - 12.02.18 - 15:01
(25) У тебя какая-то ферма, а не сервер для 1С:) А если его в ДОМ-развернуть?) Управится за 2-3 минуты?
   H A D G E H O G s
 
29 - 12.02.18 - 15:02
(26) Это поделие Fragster-a
   тарам пам пам
 
30 - 12.02.18 - 15:03
(0) >> Делал через поток в памяти скрестить с zip архиватором, но там не обойтись без вывода в файл

Разве ХранилищеЗначения(Значение, Новый СжатиеДанных(9)) используется временные файлы?
   Tateossian
 
31 - 12.02.18 - 15:05
(30) ХранилищеЗначения в запросах не работает. Хотя в новой платформе уже что-то реализовали. Нужна именно приведенная к HEX-строке вида 0x1234567890ABCDEF
   Tateossian
 
32 - 12.02.18 - 15:05
(29) Сорян, обознался.
   H A D G E H O G s
 
33 - 12.02.18 - 15:05
(28) Это вы у Microsoft спросите. 1С пользует MS XMLDOM, если я не перепутал ничего.
 
 
   тарам пам пам
 
34 - 12.02.18 - 15:05
(31) а если ЗначениеВСтрокуВнутр(Хранилище)?
   H A D G E H O G s
 
35 - 12.02.18 - 15:06
Я один не понимаю, что хочет автор?
   H A D G E H O G s
 
36 - 12.02.18 - 15:07
"Нужна именно приведенная к HEX-строке вида 0x1234567890ABCDEF"
Зачем?
"ХранилищеЗначения в запросах не работает."
Зачем?
   Вафель
 
37 - 12.02.18 - 15:13
Есть бинарный xml - фаст инфо сет
   Tateossian
 
38 - 12.02.18 - 15:18
(36) А мне и не нужно чтобы работало. Как хранить ключ записи в котором 10 регистров и длина более 900 символов? И при этом индексируемое чтобы было. Не, оно хранится без проблем. Да только места жрет. Идеально в виде бинарной строки фиксированного размера, как хэш-сумма.
   Tateossian
 
39 - 12.02.18 - 15:19
(38) *10 измерений на отборе
   Tateossian
 
40 - 12.02.18 - 15:20
(37) Задача этот бинарник привести к HEX строке. Но после HEXСтрокаИзДвиочныхДанных эта строка становится еще больше. Нужен сжатый формат хранения строк, которые потмо можно десериализовать.
   H A D G E H O G s
 
41 - 12.02.18 - 15:23
(38)
ХешированиеДанных.ХешСумма (DataHashing.HashSum)
ХешированиеДанных (DataHashing)
ХешСумма (HashSum)
Использование:

Только чтение.
Описание:

Тип: Число; ДвоичныеДанные.
Содержит текущее значение хеш-суммы. Для функций MD5, SHA1 и SHA256 – значение типа ДвоичныеДанные, для функции CRC32 – Число.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).


И используй BASE64СтрокаИзДвоичныхДанных
   H A D G E H O G s
 
42 - 12.02.18 - 15:24
Конечно Hex строка будет длинющей. Ведь это представление, а не данные. Вот base64строка - будет данными.
   cw014
 
43 - 12.02.18 - 15:27
(6) 1) Понять сериализацию в J2EE
2) Написать аналогичную в 1С
3) Кодировать в Base64
4) Передавать получившуюся белиберду
   H A D G E H O G s
 
44 - 12.02.18 - 15:27
Но ты можешь расширить альфавит и писать base128 или base256, зная, что у тебя используется только кириллица, тогда строка будет еще короче. Только придется самому писать функцию.
   Tateossian
 
45 - 12.02.18 - 15:29
(42) Все верно, но не лучше ли заставить работать zip архиватор? Короче, переформулирую: как строку закодировать в строку, чтобы она была короче исходной и подвергалась десериализации?
   Tateossian
 
46 - 12.02.18 - 15:29
(44) Не вопрос. Есть предположение, что это будет работать очень универсально и быстро?
   Tateossian
 
47 - 12.02.18 - 15:31
(41) Вот, у меня такая функция есть для кодирования в хэш
Функция ПолучитьХэш(МассивОбъектов, Знач Метод = "ХешФункция.SHA256", Знач БинарныйФормат = Истина) Экспорт
    Перем ДД, ДДСтрокой;
    Ф = ?(ТипЗнч(Метод) = Тип("Строка"), ПредопределенноеЗначение(Метод), Метод);
    
    Если Не ТипЗнч(МассивОбъектов) = Тип("Массив") Тогда
        ЛокМассив = Новый Массив;
        ЛокМассив.Добавить(МассивОбъектов);
    КонецЕсли;
    ФОбъекты = Новый ФиксированныйМассив(МассивОбъектов);
    
    ПростыеТипы = Новый ОписаниеТипов("Строка,Число,Булево,Дата");
    
    СсылочныеТипы = Новый ОписаниеТипов(Документы.ТипВсеСсылки(), Справочники.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, Перечисления.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, ПланыВидовХарактеристик.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, ПланыСчетов.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, ПланыВидовРасчета.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, БизнесПроцессы.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, Задачи.ТипВсеСсылки().Типы());
    СсылочныеТипы = Новый ОписаниеТипов(СсылочныеТипы, ПланыОбмена.ТипВсеСсылки().Типы());
    
    Хеширование = Новый ХешированиеДанных(Ф);
    
    Получатели = Новый Массив;
    Получатели.Добавить("XMLСтрока(Эл)");
    Получатели.Добавить("СокращенноДанныеИнформационнойБазыСтрокой(Эл)");
    Получатели.Добавить("ДанныеИнформационнойБазыСтрокой(Эл)");
    Кейс = Новый ФиксированныйМассив(Получатели);
    
    Для Каждого Эл Из ФОбъекты Цикл
        
        Флаг = ЧислоИзДвоичнойСтроки("0b" + ПолучитьФлаг(Не ПростыеТипы.СодержитТип(ТипЗнч(Эл))) + 
                ПолучитьФлаг(Не СсылочныеТипы.СодержитТип(ТипЗнч(Эл))))-1;
                
        ТекстовыйИД = Вычислить(Получатели[Флаг]);
        
        Хеширование.Добавить(ТекстовыйИД);            
                
    КонецЦикла;
    
    Если Ф = ХешФункция.CRC32 Тогда
        Буф = Новый БуферДвоичныхДанных(8);
        Буф.ЗаписатьЦелое64(0, Хеширование.ХешСумма);
        ДД = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буф);
    Иначе
        ДД = Хеширование.ХешСумма;
    КонецЕсли;
    
    Если Не БинарныйФормат Тогда
        ДДСтрокой = ПолучитьHexСтрокуИзДвоичныхДанных(ДД);
    КонецЕсли;
    
    Возврат ?(БинарныйФормат, ДД, ДДСтрокой);
    
КонецФункции
   H A D G E H O G s
 
48 - 12.02.18 - 15:38
(47) попробуй сначало base64
   H A D G E H O G s
 
49 - 12.02.18 - 15:42
sha256 - 32 байта данных. В base64 это будет 43 символа. Или 86 байт данных в виде строки в 1С
 
 Рекламное место пустует
   Fragster
 
50 - 12.02.18 - 15:46
(49) в utf-8 первые 128 символов таблицы весят 1 байт
   Fragster
 
51 - 12.02.18 - 15:49
хотя глянул, в мсскуле не utf-8
   Tateossian
 
52 - 12.02.18 - 15:52
(51) Только начиная с 16 поддержка UTF реализована
   H A D G E H O G s
 
53 - 12.02.18 - 15:54
"Капитан сказал большому старине Джо Генри: Здесь, где-то здесь валяется старый молоток.
Возьми этот отбойный молоток и начинай работу!
И пусть он стучит! Стучит! Бьет сталь до дыр!
Пусть стучит, стучит, бьет сталь до дыр!"

Короче, работайте, братья.
   Tateossian
 
54 - 12.02.18 - 16:02
(53) Смотри, есть такой пример. Ключ регистра в значении стр внутр:
{"#",767bf336-1fa8-4283-be31-fee83ee3c286,{2,{"D",00010101000000},0:00000000000000000000000000000000,2,{"#",a86305d7-b8a1-4312-901f-2ade3efdb351,135:911aee3a33f0f6be4ac5d0f44f4481f9},{"#",39cb59ea-9735-433b-bf1d-8eb9e4b96cc0,153:8ad2005056920edd11deebd9d3a8033e},0,0}}

270 символов

потом его переводим в бин-данные:

ДД = ПолучитьДвоичныеДанныеИзСтроки(СтрокаКлючи);
Выход = Base64Строка(ДД)

На выходе вот это

eyIjIiw3NjdiZjMzNi0xZmE4LTQyODMtYmUzMS1mZWU4M2VlM2MyODYsezIseyJE
IiwwMDAxMDEwMTAwMDAwMH0sMDowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMCwyLHsiIyIsYTg2MzA1ZDctYjhhMS00MzEyLTkwMWYtMmFkZTNlZmRiMzUx
LDEzNTo5MTFhZWUzYTMzZjBmNmJlNGFjNWQwZjQ0ZjQ0ODFmOX0seyIjIiwzOWNi
NTllYS05NzM1LTQzM2ItYmYxZC04ZWI5ZTRiOTZjYzAsMTUzOjhhZDIwMDUwNTY5
MjBlZGQxMWRlZWJkOWQzYTgwMzNlfSwwLDB9fQoK

(370 символов) еще больше стало... Но идея у меня была такая же, надо отсюда копать.
   Вафель
 
55 - 12.02.18 - 16:05
так бы и говорил, что тебе нужна архивация.
Но эта проблема уже решена давно
   Вафель
 
56 - 12.02.18 - 16:06
Например rar умеет входщие данные брать из stdin
   ptiz
 
57 - 12.02.18 - 16:06
(0)
Я так делаю, когда надо объекты 1С гонять:

объект 1С (например, структура с кучей таблиц значений) - в хранилище со сжатием:
Хранилище = Новый ХранилищеЗначения(МояСтруктура, Новый СжатиеДанных(9));

хранилище - сериализую:
КомандаСтрокой = СериализоватьЗначениеВXML(Хранилище);


Функция СериализоватьЗначениеВXML(Значение) Экспорт

    ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);
    СтрокаXML = ЗаписьXML.Закрыть();    
    
    Возврат СтрокаXML;

КонецФункции// СериализоватьЗначениеВXML()


Ну и потом - обратная операция.
   Tateossian
 
58 - 12.02.18 - 16:06
(55) Как, расскажи. Вот ищу тебя, друг!
   Tateossian
 
59 - 12.02.18 - 16:10
(57)

Хранилище = Новый ХранилищеЗначения(Стр, Новый СжатиеДанных(9)); 

Выход = ТиповыеОтчеты.СериализоватьОбъектXDTO(Хранилище);
Возвращает еще больше строк чем было)) Уж лучше не сериализовать, ибо это тот же бейс64
<ValueStorage xmlns="http://v8.1c.ru/8.1/data/core"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">AgFTS2/0iI3BTqDV67a9oKcN7ZDBTQUxDEQRxy/9JsI1luw4ycbLlQ6oII6dJlZb
GYdfEi0QVuKGRAM8+ziekef1+eni8+NxhPcQwxHCSwhxq5tO5go0e4OcGoM6E0z3
xu48UqvxSHHJ35YcEemaizPijn8Qr9vvqN4qY7ENtHWCzJRAkCakbs4+TblQJC67
EPUV3Zknzqqe+yiGM+e1jaacP44sQ4t4B9m4LEdW0EkGzVU8q9QxMFLhvXVLiAVL
lYRuRmTuamLcGzL7eiTied5v99t/L7/3Es4v</ValueStorage>
   Tateossian
 
60 - 12.02.18 - 16:12
(56) Представляю теперь потери на запуск стороннего процесса чтобы 100 символов засунуть в архив.

Уж проще переписать функцию архивирования на 1С:)))
   Вафель
 
61 - 12.02.18 - 16:12
бейс64 много избыточности добавляет. ибо он нечитаемые символы приводит к читаемым. а тебе это не нунжно
   H A D G E H O G s
 
62 - 12.02.18 - 16:13
(54) Мы до этого говорили о хэше, а не о данных. Откуда у тебя данные вылезли внезапно?
   Tateossian
 
63 - 12.02.18 - 16:14
(61) Да, идеальный вариант - это хэширование. Но это процесс одностороний... Почему я про зип заговорил, потому как 80Гб файл текста превращается в 100Мб, так как тест очень сильно архивируется. У него избыточность большая.
   Tateossian
 
64 - 12.02.18 - 16:15
(62) Я говорил о сериализации и десериализации.
   Вафель
 
65 - 12.02.18 - 16:16
все смешалось в доме Облонских
   Cyberhawk
 
66 - 12.02.18 - 16:21
(63) А чем тебе уменьшение 80 Гб до 100 Мб не подходит?
   Tateossian
 
67 - 12.02.18 - 16:21
(65) Не знаю как там у них, а у меня вопрос вполне понятен.
Как сжимать строки не теряя строковой сути?
   Tateossian
 
68 - 12.02.18 - 16:27
(66) Смотри, есть специальный регистр по версиям. Он в отдельной базе. Он умеет хранить спарвочники, документы и независимые регистры сведений, всю историю. У необъектных сущностей используются ключи, которые состоят из отборов. При сериализации ключ может занимать очень много места, более 900 символов. Хочу сократить это (сейчас строка дробится на две части, 442 символа и все остальное).
И вторая цель - небольшие кусочки данных в прикладном коде использовать в своем формате. Для большого файла это удобно, а для маленьких операций очень затратно открывать zip архиватор.
   Cyberhawk
 
69 - 12.02.18 - 16:34
(68) Справочник ключей не предлагать? :)
   Tateossian
 
70 - 12.02.18 - 16:34
(69) Нет, так как там сделано все на третьей нормальной форме на уровне SQL-я.
   Cyberhawk
 
71 - 12.02.18 - 16:35
"небольшие кусочки данных в прикладном коде использовать в своем формате ... для маленьких операций очень затратно открывать zip архиватор" // Кастую TormozIT в ветку
   Tateossian
 
72 - 12.02.18 - 16:36
(71) Да, я пользуюсь его инструментами разработчика, крутая штукенция. Там внутри можно хватить удар:) Но сериализация там у него стандартная. Зип+XDTO
   Cyberhawk
 
73 - 12.02.18 - 16:36
(70) Ты хочешь, чтоб длинную строку можно было сделать короче 900 символов и чтоб обратно из этого упакованного вида еще делать можно было?
   Tateossian
 
74 - 12.02.18 - 16:36
(73) ДА!
   Cyberhawk
 
75 - 12.02.18 - 16:37
(74) Но ты же понимаешь, что когда-то этому настанет предел и очередная длинная строка не влезет в ограничение по длине 900? Или такого не предвидится (кодируемые строки не растут со временем)?
   Tateossian
 
76 - 12.02.18 - 16:38
(73) Почему я так хочу - да потому что zip даже на 400 символов потом весит в пять раз меньше. Но файловую систему использовать для этого кощунственно - у меня кластер по 64Кб. Каждый файл на 10 байт - это минус 64Кб.
   Cyberhawk
 
77 - 12.02.18 - 16:39
(76) Был тут на форуме кто-то кто строковый ГУИД превращал в ЕАН13 :)
   Cyberhawk
 
78 - 12.02.18 - 16:40
С потерями что ли тока
   Cyberhawk
 
79 - 12.02.18 - 16:40
Ну т.е. с коллизиями
   Tateossian
 
80 - 12.02.18 - 16:40
(75) Да это я взял лимит на индекс в байтах в SQL. В идеале нужна другая сериализация. Самый простой вариант - упакованная XML строка в двоичный данные и потом в виде HEX строки хранимая)
   Tateossian
 
81 - 12.02.18 - 16:41
(78) Ну zip же может текст и без потерь сжимать. По крайней мере на практике не разу не бывало чтоб xml из zip не прочитался.
   Cyberhawk
 
82 - 12.02.18 - 16:42
(81) Я так понял что тебя устроит алгоритм zip-сжатия, если он будет выполняться в памяти (без задействования диска)?
   Tateossian
 
83 - 12.02.18 - 16:42
(82) Да.
   Cool_Profi
 
84 - 12.02.18 - 16:42
(81) Зип с потерями сжимать не может. по алгоритму
   Tateossian
 
85 - 12.02.18 - 16:42
(82) Я пытался потоки прикрутить 1С, но там на выход только можно поток, на вход нельзя.
   Cyberhawk
 
86 - 12.02.18 - 16:44
(85) Нативную компоненту напиши какую-нибудь, на вход ей подаешь строку или поток, она там уже в памяти шуршит и делает. Или нативные компоненты 1С так не умеют (с памятью работать) в силу каких-нибудь архитектурных ограничений?
   Tateossian
 
87 - 12.02.18 - 16:44
(82) ЗаписьZipФайла (ZipFileWriter)
Методы:

Добавить (Add)
Записать (Write)
Открыть (Open)
ПолучитьДвоичныеДанные (GetBinaryData) <================= вот это

Конструкторы:

На основании имени файла
На основании потока
Формирование неинициализированного объекта

Описание:

Предназначен для записи в ZIP-архив.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

-----------------

Можно кончено и через средства ОС запускать zip, но это не принесет особого эффекта на небольших операциях, очевидно.
   H A D G E H O G s
 
88 - 12.02.18 - 16:45
ЗаписьZipФайла (ZipFileWriter)
На основании потока
Синтаксис:

Новый ЗаписьZipФайла(<Поток>, <Пароль>, <Комментарий>, <МетодСжатия>, <УровеньСжатия>, <МетодШифрования>)
   Buster007
 
89 - 12.02.18 - 16:45
(22) "И очень я считаю красиво." я так понимаю, это ты придумал эту схему?)
   Tateossian
 
90 - 12.02.18 - 16:45
(88) Тут есть подвох:

ПолучитьДвоичныеДанные(<Пароль>, <Комментарий>, <МетодСжатия>, <УровеньСжатия>, <МетодШифрования>)
Параметры:

<Пароль> (необязательный)

Тип: Строка.
Пароль, который будет назначен архиву.
Если пароль не назначен или является пустой строкой, то шифрование не происходит.
<Комментарий> (необязательный)

Тип: Строка. 
Комментарий, описывающий ZIP-файл. 
<МетодСжатия> (необязательный)

Тип: МетодСжатияZIP. 
Метод сжатия, которым будет сжиматься архив.
Значение по умолчанию: Сжатие. 
<УровеньСжатия> (необязательный)

Тип: УровеньСжатияZIP. 
Уровень сжатия данных.
Значение по умолчанию: Оптимальный. 
<МетодШифрования> (необязательный)

Тип: МетодШифрованияZIP. 
Метод шифрования, которым будет зашифрован архив.
Значение по умолчанию: Zip20.
Возвращаемое значение:

Тип: ДвоичныеДанные.

Описание:

Получает ZIP-архив в виде двоичных данных и закрывает файл.
При использовании данного метода объект ЗаписьZipФайла должен быть создан с помощью конструктора без параметров. <=========================
При этом открывать архив явно с помощью метода Открыть не требуется.
При завершении работы данный метод закрывает архив, аналогично методу Записать.
   H A D G E H O G s
 
91 - 12.02.18 - 16:46
Но я все равно нихера не понимаю, что хочет автор.
Зачем в ключи поиска писать данные?
В ключи поиска нужно писать хэш данных.
Данные нужно писать в неиндексируемые поля.
   Tateossian
 
92 - 12.02.18 - 16:46
(89) Да, я.
   Tateossian
 
93 - 12.02.18 - 16:47
(91) А как ты историю по регистру будешь смотреть? Час сидеть, ждать SEEk LOOP когда выполнится? Напоминаю, база с версионированием - одна таблица более 100Гб. Там миллиард строк.
   H A D G E H O G s
 
94 - 12.02.18 - 16:49
(93) Я ты часто данные смотришь?
   H A D G E H O G s
 
95 - 12.02.18 - 16:49
(93) Ты имел ввиду key lookup ? Так он быстр.
   Tateossian
 
96 - 12.02.18 - 16:49
(91) Можно и не писать, для этого есть хэширование. Но хэш ты потом не загрузишь в другую базу.
   Tateossian
 
97 - 12.02.18 - 16:50
(94) Очень. Все этим пользуются, без него никак. А на ссылку там стоит строка или ЗначениеВСтрокуВнутр()
   Tateossian
 
98 - 12.02.18 - 16:52
(95) на миллиарде записей нужно полминуты иногда ждать отклика. Но отчет точечный работает быстро. Только по ссылочной сущности.
   Buster007
 
99 - 12.02.18 - 16:52
(92) подскажи "Ок, для быстрого поиска я юзаю хэш-ключи, удобно многомерные сущности создавать, эти механизмы ускорили проведение расчета себестоимости с 30 до 5 минут" Что за расчет себестоимости? Что за сущности ты объединил?
   Tateossian
 
100 - 12.02.18 - 16:53
Почему я хочу такое - да потому что у JVM есть и работает это круто. .bin выгрузка занимает десяток-другой байт. Это не прожорливый xml. И потом его можно на другой виртуальной машине распаковать.
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует