Имя: Пароль:
1C
1С v8
Как ускорить работу функции добавления в очередь выгрузки?
,
0 Pentosh
 
06.02.17
16:03
Здравствуйте, уважаемые.
Подскажите, пожалуйста, как ускорить выполнение функции которая создает (в худшем случае, ~350т. записей в регистре сведений)?

Самописная конфа, 8.3.7, УФ.

Ситуация в следующем.
Выполняю задание по интеграции с Апи сайта, мне нужно на него отправлять данные при их редактировании, для этого создаю очередь в РС, в которую записываю Json строку для выгрузки (подготавливаю данные заранее). И когда дошло дело для записи данных о изменении цен на номенклатуру появились проблемы с производительностью данной функции. т.е. создаю док, провожу его, записывается набор данных, я перехватываю эту запись и на ее основе делаю записи в очереди, в худшем случае (пересчет всех номенклатуры) это около 350тыс. записей, для каждой из них, я делаю запросы на получение нужных мне данных из базы (возможно тут и кроется все зло), и потом просто записываю в РС.
В обычном состоянии (без записи в очередь) такой док. отработает за 45 минут, а с очередью это может занять 3-5 часов, что не есть гуд.

В связи с чем, прошу совет у знатоков, что делать/что читать/куда смотреть?
1 shuhard
 
06.02.17
16:08
2 Pentosh
 
06.02.17
16:11

СписокJsonСтрок = ПолучитьСписокJsonСтрокДляНабора(НаборЗаписей);
Для каждого СтрокаНабора Из СписокJsonСтрок Цикл
   ДобавитьВОчередь(СтрокаНабора);
КонецЦикла;

Функция ПолучитьСписокJsonСтрокДляНабора(Набор)
   СписокJsonСтрок = Новый СписокЗначений;
   Для каждого СтрокаНабора Из Набор Цикл
       JsonСтрока = Новый Соответствие();
       JsonСтрока.Вставить("Номенклатура", ПолучитьУИДСервиса(СтрокаНабора.Номенклатура));
       СписокJsonСтрок.Добавить(JsonСтрока);
   КонецЦикла;

КонецФункции;



Типо того происходит :)

И кстати, ошибся, сначала формируется набор с данными для записи, а потом просто в цикле записывается.
3 Pentosh
 
06.02.17
16:12
(1) спасибо, но лучше что нибудь из бесплатного.
4 Pentosh
 
06.02.17
16:12
(1) и эта задача, более чем уверен, не стоит этих денег :)
5 FIXXXL
 
06.02.17
16:17
(4) ну тогда замер производительности хотя бы глянь
у тебя в коде выше еще вызовы процедур идут, что там внутре - хз
смотри замер
6 Pentosh
 
06.02.17
16:18
Поможет ли мне то, что я укажу буквально когда начать и закончить транзакцию, т.е. сейчас это 1С делает автоматически, я транзакциями не управляю.
Если все манипуляции записью порции данных убрать в одну транзакцию, ускорить ли это?
7 mistеr
 
06.02.17
16:18
(0) >В обычном состоянии (без записи в очередь) такой док. отработает за 45 минут, а с очередью это может занять 3-5 часов, что не есть гуд.

Да и в обычном состоянии 45 минут это вери бэд.

Найди способ вытянуть все одним запросом. Тут может помочь план обмена. И записывай не в РС, а в JSON файл.
8 FIXXXL
 
06.02.17
16:26
(6) запись в РС - само по себе затратное занятие
как выше писали: узел обмена, читай изменения, выгружай, зачищай изменения после подтверждения
9 Pentosh
 
06.02.17
16:31
(7) Про обычное состояние: Это 35 тысяч номенклатуры * на 19 ценовых группы столько записей он генерирует (хоть и расчеты там тривиальные). Но согласен, там много косяков которые буду исправлять и улучшать.

(5) про замер это вы хорошо напомнили, совсем забыл, спасибо.

(8) тут все сложнее, мне нужно именно каждое состояние номенклатуры или другого объекта сохранять, т.е. изменил номенклатуру (наименование изменил) - создал запись в очереди и выгрузил, изменил туже номенклатуру - создал/ выгрузил и т.д., в предложенном вами варианте получится так: изменил, изменил, создал запись в очереди/выгрузил.
Надеюсь понятно объяснил, что хотел)

Т.е. веду, так сказать, историю состояния объекта (сейчас сказать, зачем это нужно не могу, уже много воды утекло с момента когда решили делать именно так)
10 FIXXXL
 
06.02.17
16:38
(9) выгрузка+версионирование?
11 Pentosh
 
06.02.17
16:39
(10) получается типо того, только более упрощена.
12 Pentosh
 
06.02.17
16:44
и еще 1 очень важный момент, почему именно так.
очень важен порядок, т.к. много ссылок друг на друга и чтобы перед созданием записи ссылкой на другую та запись уже гарантированно была.
С изменениями будет проблематично (основываясь на тех немногих знаниях о них) такое осуществить.
13 Pentosh
 
06.02.17
16:48
(1) кстати, спасибо за ссылку, сообразил что можно по содержанию курса посмотреть оглавления возможных решений.
14 Вафель
 
06.02.17
17:03
добавляй только ссылку при проведении.
После рег заданием генерируй джсон и выгружай