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