Хочу сохранить текстовый файл в БД - есть возможность сделать это быстрее? #743161


#0 by RomaH
Про хранение файлов вне БД - знаю и понимаю но вопрос - есть возможность сделать сохранение в ХЗ быстрее? текст - общий объем 25 метров (900 000 строк) храню в документе в виде ХЗ отображаю в ТекстовомДокументе - реквизит формы сохраняю так: &НаСервере     ТекущийОбъект.ТекстФайлаРеестра = Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных);      занимает более 5 минут есть варианты?
#1 by Волшебник
отключи сжатие
#2 by aka AMIGO
можно в БД хранить ссылку, а не документ
#3 by RomaH
не помогает - "секундомер включается" после выхода из процедуры т.е. весь код внутри процедуры отрабатывает быстро - секунд 5 где-то
#4 by RomaH
еще раз - я знаю что можно хранить ссылку на файл но вот так звезды встали - хочу хранить в базе
#5 by Fragster
а нафиг там временный файл?
#6 by Fragster
какая строка в замере занимает столько времени?
#7 by sapphire
+1
#8 by Fragster
есть мнение, что с клиента надо убрать реквизит объекта с данными нафиг
#9 by RomaH
просто так - эксперименты по времени - тоже самое никакая - выход из процедуры - и жду пока сохранит чего убрать? - на клиенте форма с реквизитом ФОРМЫ типа ТекстовыйДокумент - с именем "ТекстРеестра"
#10 by RomaH
никакая - выход из процедуры - и жду пока сохранит
#11 by Fragster
т.е. все дело в сериализации этого дела для передачи клиент-сервер. т.е. см , а там уже нужно придумывать, как работать с этим документом без передачи его в контексте туда-сюда
#12 by DmitrO
да нет же, все уже на сервере, дело в самой записи в базу похоже
#13 by Fragster
нет, дело в передаче контекста на клиент и обратно
#14 by Fragster
для проверки можешь во внешней обработке в серверной процедуре прочитать и записать документ, не передавая его на клиент ни в каком виде
#15 by DmitrO
может быть, это смотря как автор определяет что запись завершилась, в объекте в ПриЗаписи надо точку поставить, посмотреть где она в этих 5ти минутах сработает
#16 by RomaH
вопрос тогда - как этого избежать?
#17 by RomaH
не менять текущийобъект - а писать в отдельный объект конфигурации?
#18 by RomaH
ага - похоже начинаю понимать убрал тело процедуры "ПередЗаписьюНаСервере" он у меня пока не вошел в ПриЗаписиНаСервере т.е. надо с клиента вызвать сервер без контекста передав в него временное хранилище? т.е. не должно быть &НаСервере Процедура - ибо в этом случае у меня гоняется весь "ТекстРеестра" на сервер и обратно ... хотя внутри "перед записью" заходит быстро
#19 by RomaH
&НаСервере Процедура а выходит - медленно т.е. контекст передается обратно почему он передается обратно - если с ним ничего не далали?
#20 by RomaH
т.е. получается - перед любым серверным вызовом с контекстом - надо очистить ТекстРеестра т.е. принцип такой?
#21 by RomaH
в итоге: [1с] &НаСервереБезКонтекста Функция ПолучитьТекстИзДокумента(Знач ОбъектСсылка)          МенеджерЗаписи = РегистрыСведений.МЭК_ФайлыРеестров.СоздатьМенеджерЗаписи;          МенеджерЗаписи.ДокументРеестра = ОбъектСсылка;          МенеджерЗаписи.Прочитать;          ТекстовыйДокумент = МенеджерЗаписи.ТелоРеестра.Получить;          АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ТекстовыйДокумент);          Возврат АдресВременногоХранилища;      КонецФункции &НаКлиенте Процедура КомандаПоказатьТекстФайла(Команда)          Если ТекстРеестра.КоличествоСтрок = 0 Тогда                  АВХ = ПолучитьТекстИзДокумента(Объект.Ссылка);         ТекстРеестра = ПолучитьИзВременногоХранилища(АВХ);     КонецЕсли;      КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)          АдресВременногоХранилищаТекстаРеестра = ПоместитьВоВременноеХранилище(ТекстРеестра,УникальныйИдентификатор);          ТекстРеестра.Очистить;      КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи)          ПослеЗаписиНаСервере(АдресВременногоХранилищаТекстаРеестра,Объект.Ссылка);          ТекстРеестра = ПолучитьИзВременногоХранилища(АдресВременногоХранилищаТекстаРеестра);      КонецПроцедуры &НаСервереБезКонтекста Процедура ПослеЗаписиНаСервере(Знач АВХ,Знач ОбъектСсылка)          ТекстовыйДокумент = ПолучитьИзВременногоХранилища(АВХ);          МенеджерЗаписи = РегистрыСведений.МЭК_ФайлыРеестров.СоздатьМенеджерЗаписи;     МенеджерЗаписи.ДокументРеестра = ОбъектСсылка;     МенеджерЗаписи.ТелоРеестра = Новый ХранилищеЗначения(ТекстовыйДокумент);          МенеджерЗаписи.Записать;      КонецПроцедуры [/1c] итого по 7 секунд на чтение и запись
#22 by Fragster
#23 by RomaH
а как еще от тяжелого контекста избавиться?
#24 by RomaH
странно - работает так же долго на сохранение а вот через двоичные данные - то быстро
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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