Загрузка из оч. большого CSV #720907


#0 by Slaventiya
Подскажите в чем беда, файл - 630 Мб, строк 7 430 000, наблюдается просто ОЧ. СИЛЬНОЕ падение скорости загрузки где то после 40 000 обработанных строк, в файле инфа из внешней системы НЕ 1С. При загрузке создаются сведения и их значения, все это соответственно привязывается к НаборамДополнительныхРеквизитовИСведений, далее привязывается к конкретной номенклатуре.
#1 by H A D G E H O G s
Не попадаешь в индекс.
#2 by H A D G E H O G s
:-)
#3 by Defender aka LINN
Как читаешь?
#4 by Господин ПЖ
память выжирается
#5 by Heckfy
Что то мне подсказывает, что через текстовыйдокумент :)
#6 by H A D G E H O G s
НаборЗаписей.ОбменДанными.Загрузка=Истина;
#7 by Slaventiya
Читаю построчно, иначе по любому нехватка ОЗУ, Строку в массив подстрок (Все данные массива строкимассив на сервер
#8 by H A D G E H O G s
Уже неплохо.
#9 by Господин ПЖ
погляди счетличи в винде, не распухает ли клиент по памяти... завернуть все в транзакцию по 1000 позиций
#10 by H A D G E H O G s
Бессссполезно.
#11 by bolobol
Читаешь "по строчно" - это как? ПолучитьСтроку(й) или ПолучитьСледующуюСтроку ? - разница ОГРОМНА!
#12 by magicSan
скорость то поди на записи падает а не чтении
#13 by bolobol
На запись скорость постоянна.
#14 by PLUT
вот еще, может поможет
#15 by rsv
Если 1С на скуле  - парсите импортом данных скуля
#16 by rsv
в таблицу
#17 by magicSan
в коде в каком месте скорость то падает? чтение?
#18 by bolobol
Вангую - на чтении. Т.к. это предполагается и без открытия третьего глаза. Опровержения пока не видим...
#19 by Господин ПЖ
а чтению то с чего падать?
#20 by Господин ПЖ
если только там нет кривого цикла и "нечто" забивает собой всю память
#21 by Torquader
А что его побайтно читать ? 630 мегабайт - это немалый файл, но построчно может читаться на ура. А вот если данные каждой строки или их часть потом куда-то в память складываются, то память всё равно кончится. Нужно не только читать построчно, но и обрабатывать также, чтобы после обработки блока память освобождалась.
#22 by Господин ПЖ
отладчик с замером производительности ничего не говорит? например выполняется строка N раз, хотя она должна отрабатывать 1 раз - запихнута в цикл по невнимательности
#23 by КонецЦикла
запороц не предлагать?
#24 by МихаилМ
разбейте задачу на подзадачи если хотите управлять производительностью абстрагируйтесь от источников данных. разделите методы чтения, обработки, вывода при профилеровке сразу станут понятны медленно работающие методы программы. будет возможность изменить метод доступа и источник данных ((oledb,odbc)*(ado,ado+GameWithFire), тескт, ado.stream,FSO,+ разбиение ра части + конвертация в промежуточный формат ) - те для csv вариантов 20 чтения будет возможность распараллеливания по фоновым заданиям в РС можно писать порциями в транзакции, адаптивно подбирая количество записей в транзакции.
#25 by magicSan
вангую если оставить цикл с одной операцией чтения для теста такого не будет
#26 by bolobol
Похоже, в 18:00 у ТС закончился рабочий день... Завтра перечитает и развангует гадания на кофейной гуще.
#27 by lodger
Как читаешь? +1 как читаем то? ЗагружаемыйФайл.Прочитать(ИмяФайлаВ630Мб); ?
#28 by Serginio1
Пиши через булки используя Merge
#29 by Slaventiya
Не густо.. С транзакциями пробовал, не помогает, ед что помогает считывать по 25000 позиций, заново открывать файл, и с позиции на которой закончил, но это уже ручки, пока на этом стал. Память и загрухзка сервера приблизительно в одном состоянии так и читаю...
#30 by H A D G E H O G s
Открой для себя ЧтениеТекста
#31 by H A D G E H O G s
Для набора записей ставь ОбменДанными.Загрузка=Истина, это заставит сервер 1С не слать к ms sql запрос о наличии данных.
#32 by Slaventiya
, Спасибо попробую... правда уже только завтра
#33 by ILM
Загружу файл - дорого.
#34 by Рэйв
У файла же фиксированная структура. Напиши короткую обработку делящую файл на более мелкие части. Пусть их будет много но при закрытии они будут очищать память и читаться должны быстро
#35 by magicSan
я также вчера думал позабыв про
#36 by mzelensky
Нарезать один большой файл на несколько маленьких уже предлагали?
#37 by Sammo
+100
#38 by Нуф-Нуф Второй
Юзай чтение текста ЧтениеТекста (TextReader) ЧтениеТекста (TextReader) Методы: Конструкторы: По имени файла Формирование неинициализированного объекта Описание: Предназначен для последовательного чтения текстовых файлов (большой длины). Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение. Пример: См. также: ЗаписьТекста ЧтениеТекста, конструктор По имени файла
#39 by Slaventiya
А что вы думаете о рекурсивном вызове? Метод обращения к теккту тот же, через Текстовый документ по причине того что я могу начать читать текст с нужной мне позиции а по достижению опред. значения, скажем 10К обработанных записей помещать номер новой строки в реквизит формы обработки и уничтожению объекта текст, а цикл всегда стартует с позиции указанной в реквивите формы ?
#40 by H A D G E H O G s
Я думаю - это херовый вариант. Чем не нравится чтение текста?
#41 by Slaventiya
Почему ? На данный момент не наблюдается падения производительности, а не нравится тем что я не могу начать чтение с той позиции на которой произошло падения (Если таковое случится, например нет электричества, причем у нас это скорее норма), а загрузка без перерыва по прибл. подсчетам займет до 3.5 суток
#42 by H A D G E H O G s
"а загрузка без перерыва по прибл. подсчетам займет до 3.5 суток" У вас что то явно не то
#43 by Kamas
если все данные уникальны нет пересекающихся то советую разбить файл на несколько и грузить его многопоточно
#44 by МихаилМ
630 мег / 3,5 суток ~ 2,1 килобайт в секунду раз в 1000 ускорить можно . те минут за 5-6 загрузиться должно.
#45 by Slaventiya
Ок, файл содержит Ид - ВидаНоменлатуры, Ид - Номенклатуры, Ид - Свойтсва, Ид - ЗначенияСвойства (Если не примитивный тип данных), ЗначениеСвойства, ТипСвойства, НаименованиеСвойства: Виды загружены - но Виды выгруженны из внешней системы не 1С и загруженыв через РС Синхронизация: Измрения:   ВнешнийИд - Строка Использую для поиска вида. С номенклатурой проще, Артикул и есть Ид Номенклатуры, по нему происходит поиск номенклатуры.... ( Поиск также используется по Номенклатура ЗначенияСвойствОбектов ПВХ.ДополнительныеРеквизитыИСведения ) все по регистрам сведений синхронизации расскидано, кроме номенклатуры Сопоставляю ТипСвойства с ПВХ для создания, типа MultiPle, Select, Number - это оказывается строка, Bit - это Булево, Date - Дата, У некотjрых есть Ил, у некоторых нет, у тех что нет это не ЗначенияСвойствОбъектов и т.д. Все это создается, связывается и записывается в регистры синхронизации Как то так....
#46 by Господин ПЖ
без "метрик" чего сколько занимает и где начинает проседать - разговор ни о чем
#47 by H A D G E H O G s
Кэширование тебе поможет. Даже без запихивания всех ID номенклатур в запрос и пакетного получения ссылок.
#48 by Slaventiya
В базе ничего кроме номенкалтуры и видов нет, а собственник именно захотел, хотя его убеждали в том что это не совсем целесообразно, стоит связываться только с тем что есть в наличии или были движения за последние полгода
#49 by Slaventiya
У меня в данной области явный пробел, нельзя ли подробнее или ссылки на методики ?
#50 by rsv
Так и непонял .... база на скуле ?
#51 by Господин ПЖ
см
#52 by bolobol
Не понимаю. В чём проблема записывать сколько раз было вызвано чтение текста?
#53 by zulu_mix
#54 by Господин ПЖ
ну ладно в 7.7 были проблемы - текст глотался весь сразу, начинались пляски с fso/ado а в 8.2 чему тормозить?
#55 by zulu_mix
блин..
#56 by Господин ПЖ
в скуль 2000 через dts подобный объем запихивается в плоскую таблицу за несколько минут максимум...
#57 by bolobol
Это, типа, вам сюда -
#58 by Slaventiya
Ни в чем, как начнеш с нужной позиции ?
#59 by bolobol
Наверное, пропустив необходимое количество ненужных, не?
#60 by Зеленый пень
ЧтениеТекста работает быстро - поверь. И проверь.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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