|
как загрузить большой файл в 1с ? | ☑ | ||
---|---|---|---|---|
0
datog
05.07.17
✎
16:44
|
уф
есть текстовый файл 1.3 гига его нада загрузит в 1c в справочник. 30 миллионов строк. пока пытаюсь загрузить просто считывая, 13 гиг памяти в диспетчере задач скушала 1с.думаю вывалится когда кончится память. как лучше сделать? |
|||
1
Numerus Mikhail
05.07.17
✎
16:45
|
Считывать блоками
|
|||
2
datog
05.07.17
✎
16:46
|
(1) а как?
файл выложили наши доблестные государственные службы на официальном сайте именно в таком целом виде. ничем открыть такой файл полностью не получается |
|||
3
Numerus Mikhail
05.07.17
✎
16:47
|
(2) что-то типа такого:
//Прочитать первую строку Текст = Новый ЧтениеТекста(Путь); Стр = Текст.ПрочитатьСтроку(); |
|||
4
Wirtuozzz
05.07.17
✎
16:47
|
(0) УТ 11 файл 14 Гигов. Загрузка была 5 или 6 часов. Но ничего, загрузилось.
|
|||
5
Wirtuozzz
05.07.17
✎
16:48
|
Такие файлы надо грузить потихонечку. Справочник лучше выгружать частями если есть возможность. Так проще будет.
|
|||
6
Фрэнки
05.07.17
✎
16:50
|
интересно, а в комплекте с этим файлом (если это не загружать в 1С) имеется что-то, что умеет с ним работать?
|
|||
7
Фрэнки
05.07.17
✎
16:52
|
может это CSV файл и его можно затолкать в СУБД какую-то и затем подключиться к этой СУБД для обработки данных уже в 1С ?
|
|||
8
Мыш
05.07.17
✎
16:52
|
(6) Дожили. Для работы с чем-то необычным программисты спрашивают доп. ПО )
|
|||
9
Wirtuozzz
05.07.17
✎
16:53
|
(7) зачем?
|
|||
10
Фрэнки
05.07.17
✎
16:54
|
(8) я не запрашиваю, а мне просто интересно, как сами авторы файла предполагали его дальнейшее использование
|
|||
11
Мыш
05.07.17
✎
16:54
|
Поток (Stream)
Описание: Представляет собой поток данных, который можно последовательно читать и/или в который можно последовательно писать. Экземпляры объектов данного типа можно получить с помощью различных методов других объектов. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, интеграция. |
|||
12
Мыш
05.07.17
✎
16:55
|
(10) Как обычно, никак не предполагали. Проблемы негров шерифа не тревожат.
|
|||
13
Базис
naïve
05.07.17
✎
16:55
|
Тебе точно надо этот файл держать в базе, а не снаружи? Как часто он может меняться?
Если именно в лоб хочешь грузить, то разбей его (да хоть winrar-ом на части без сжатия) на удобные по размеру куски и залей. 10 строк, что попадут на разбиение, потеряешь. Никому о них не говори. |
|||
14
Wirtuozzz
05.07.17
✎
16:56
|
(0) Не парь мозги ни себе ни нам. Бери нормальный комп а не калькулятор. Файлы до 14 гигов грузятся, и это мной проверено. Они грузятся на моей персоналке (32 гб Оперативки) и на серваке. Не скажу конфиг, не заморачивался.
На серваке файл грузился около 5-6 часов, и тут не возникает никаких проблем. Так что загрузить файл 1.5 ГБ - легко, если файл нормальный. |
|||
15
Lama12
05.07.17
✎
16:56
|
(0) А что за файл?
|
|||
16
Wirtuozzz
05.07.17
✎
16:57
|
Правда я грузил xml файл, обработкой универсальный обмен данными в формате xml
|
|||
17
Базис
naïve
05.07.17
✎
16:58
|
(15) +1. Дай скачать :)
ЗЫ За 54-ФЗ можно отправлять чеки на мыло депутатам, производителям оборудования и налоговым. |
|||
18
vis_tmp
05.07.17
✎
17:00
|
Что за файл-то?
|
|||
19
Базис
naïve
05.07.17
✎
17:04
|
Щас сюда выложит, наверное.
|
|||
20
ptiz
05.07.17
✎
17:07
|
(0) "загрузить просто считывая, 13 гиг памяти в диспетчере задач скушала 1с." - криво считываешь
|
|||
21
Господин ПЖ
05.07.17
✎
17:11
|
может он строки складывает - это память хорошо съедает
|
|||
22
datog
05.07.17
✎
17:18
|
(20) а как "прямо" ?
|
|||
23
Фрэнки
05.07.17
✎
17:19
|
(22) смотри выше упоминание про Поток
|
|||
24
xaozai
05.07.17
✎
17:22
|
||||
25
Волшебник
модератор
05.07.17
✎
17:30
|
(0) А что за файл на 30 млн строк? Что он содержит?
|
|||
26
Фрэнки
05.07.17
✎
17:40
|
(22) ну если уж совсем трудно ориентироваться в синтакс помощнике, то вот пример
--- ЧтениеДанных (DataReader) Описание: Объект предназначен для чтения различных типов данных из источника данных. В качестве источника могут выступать Поток, Файл или ДвоичныеДанные. Необходимо соблюдать следующий порядок работы с данным объектом: Создать объект ЧтениеДанных на основании источника данных. Выполнить требуемые действия с помощью объекта. Закрыть экземпляр объекта ЧтениеДанных. При необходимости использовать другие методы для работы с источником данных, требуется сначала закрыть экземпляр объекта ЧтениеДанных с помощью метода Закрыть, выполнить необходимые действия над источником, установить требуемую позицию для чтения из источника и создать новый экземпляр ЧтениеДанных. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Пример: ПотокДанных = ФайловыеПотоки.ОткрытьДляЧтения("document.txt"); ЧтениеДанных = Новый ЧтениеДанных(ПотокДанных); Cтрока1 = ЧтениеДанных.ПрочитатьСтроку(); ЧтениеДанных.Закрыть(); ПотокДанных.Перейти(200, ПозицияВПотоке.Начало); ЧтениеДанных = Новый ЧтениеДанных(ПотокДанных); Cтрока2 = ЧтениеДанных.ПрочитатьСтроку(); ЧтениеДанных.Закрыть(); --- |
|||
27
МихаилМ
05.07.17
✎
20:56
|
(25)
скорее всего список недействительных российских паспортов http://services.fms.gov.ru/info-service.htm?sid=2000 |
|||
28
Adilgeriy
05.07.17
✎
21:10
|
(27) согласен. тоже пробовал его открыть в экселе. тот сказал иди нафиг. в 1с не затаскивал. под него отельную базу держать надо
|
|||
29
datog
06.07.17
✎
11:25
|
(23) мне файл хотя бы загрузить нужно ."поток" я так понял больше для обработки уже имеющегося.
либо грузить потоком с разбитием на части ? что то хардкор какой то. у меня i7-4790 , 16u, памяти, ssd , win7-64 пока не загрузилось... Текст = Новый ТекстовыйДокумент; Текст.Прочитать(Путь); Для НомерСтроки = 2 по Текст.КоличествоСтрок() Цикл КонецЦикла; пока только эти строки.всего 100 миллионов строк.дальше 20 миллионов так и не дошел |
|||
30
Кирпич
06.07.17
✎
11:30
|
(0) Нахрен в 1с грузить 30 млн. строк? Пускай они отдельно хранятся. Ну а если уж точно надо, то надо загружать частями. Раздели файл на 10000 частей и грузи.
|
|||
31
Базис
naïve
06.07.17
✎
11:36
|
Вебсервис надо под такое, наверное.
Ты разбить его на куски смог? Обновления как будут? Как полностью новый файл, как добавления, как изменения, ХЗ-как? |
|||
32
datog
06.07.17
✎
11:44
|
(30) ну все равно csv придется как то преобразовать во что то.
|
|||
33
dachnik
06.07.17
✎
11:47
|
(0) А почему именно в справочник, а не регистр сведений. Всяко по шустрее будет работать. Ну и поддерживаю вопрос - зачем это тянуть в рабочую базу? Не проще ли создать отдельную таблицу/базу?
|
|||
34
Господин ПЖ
06.07.17
✎
11:49
|
(32) положить в sql. через dts это быстро делается
|
|||
35
Кирпич
06.07.17
✎
11:50
|
(32) ёпрст. напиши какой нибудь примитивный http сервер на C# или NodeJS. Запихай этот csv в SQLite. Тут делов на пару часов.
|
|||
36
xaozai
06.07.17
✎
11:56
|
(35) Можно без сервисов и С# обойтись. В MSSQL добавляется новая база, там создается таблица с нужными полями, файл читается либо потоком, либо FileSystemObject, заносится в эту новую базу простыми insert'ами (ADODB.Connection). Потом в рабочей базе настраивается внешний источник данных, и данные получаются при необходимости запросами...
|
|||
37
Кирпич
06.07.17
✎
12:00
|
(36) ну это кому как нравится. вариантов море. главное в 1с не тащить это всё.
|
|||
38
datog
06.07.17
✎
12:25
|
переделал ,перенес файл csv на ssd ?стало грузиться за 10 минут.
Текст = Новый ЧтениеТекста(Путь, КодировкаТекста.ANSI); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки мСтрокФайла.Добавить(Стр); //Сообщить(Стр); Стр = Текст.ПрочитатьСтроку(); КонецЦикла; |
|||
39
Господин ПЖ
06.07.17
✎
12:30
|
формально сервис лучше с точки зрения мобильности, безопасности и независимости
|
|||
40
Кирпич
06.07.17
✎
12:43
|
(38) повлияло даже не столько SSD, сколько перенос файла на другой физический диск.
|
|||
41
mistеr
06.07.17
✎
13:11
|
(29) Пойми наконец разницу между ТекстовыйДокумент.Прочитать() и ЧтениеТекста.ПрочитатьСтроку()! В первом случае память выделяется в размере всего файла, а во втором только на одну строку.
|
|||
42
Shur1cIT
06.07.17
✎
13:39
|
(0) все не читал, почему бы на потоки не разобить и не грузануть файл?
второй экзотический вариант, создать в справочнике 30 милионов элементов опятьже в многопоточном режиме, далее средствами скуля напрямую через скуль грузить в эти заготовки данные. |
|||
43
Кирпич
06.07.17
✎
13:48
|
(42) так тормозит запись в базу 1с. 1с прочитает такой текстовый файл за пару минут.
|
|||
44
Shur1cIT
06.07.17
✎
13:54
|
(43) запись многопоточно можно запустить
|
|||
45
Кирпич
06.07.17
✎
14:02
|
(44) да не думаю, что будет быстрее. если бы в разные справочники писало, а то в один. конкуренция и всё такое.
|
|||
46
mistеr
06.07.17
✎
14:29
|
(43) Кто сказал, что тормозит запись? В (0) только память кушается.
|
|||
47
Кирпич
06.07.17
✎
14:50
|
(46) ну автора вроде научили как не читать в память весь файл целиком. а добавить в 1с 30 млн. записей сам попробуй и скажи тормозит или не тормозит.
|
|||
48
mistеr
06.07.17
✎
15:17
|
(47) Не думаю, что скорость записи зависит от общего количества.
|
|||
49
Кирпич
06.07.17
✎
15:21
|
(48) нифига ты сказанул :)
а от чего же она зависит тогда? от фазы луны? |
|||
50
datog
06.07.17
✎
16:20
|
скорость записи в регистр сведений это конечно жесть.
|
|||
51
Fram
06.07.17
✎
16:30
|
(50) не пиши в рабочую базу. Создай отдельную скуль базу на любом движке.
Подумай как будешь обслуживать потом рабочую базу. |
|||
52
Кирпич
06.07.17
✎
17:00
|
(51) да ему уже намекали, что нормальные люди такое в 1с не загружают.
|
|||
53
datog
06.07.17
✎
17:55
|
(52) под это дело отдельная база 1с.
но загрузится ко второму пришествию .... |
|||
54
mistеr
06.07.17
✎
18:04
|
(49) От железа в основном.
(53) Терпи. Это 1С. |
|||
55
Fram
06.07.17
✎
20:50
|
(53) мс скуль, в зависимости от железа, скорее всего, загрузит такое за несколько минут
|
|||
56
Fram
06.07.17
✎
20:51
|
(55) а то и секунд
|
|||
57
Maniac
06.07.17
✎
21:12
|
хы...
Нужно разделить все на процессы 1) чтение файла 2) запись в 1С элементов А вот самая фигня будет если этот файл нужно будет повторно грузить с синхронизацией уже существующих элементов. Если на какой то стадии произойдет сбой - и в базе появятся элементы. придется все чистить в базе. Что на мой взгляд станет тупиком - придется поднимать снова из резерва базу. Если еще и с синхронизацией... не знаю чо даже сказать. Самый трудоемкий из всего процесс - запись в базу справочника. 90 процентов времени. Вывод - НАФИГА ТЫ ГРУЗИТЬ ЭТО ВСЕ? Лучше в регистр сведений пихни все для начала - а создавай элементы потом по мере необходимости. |
|||
58
Maniac
06.07.17
✎
21:14
|
Бей частями.
100к строк считал - впихнул в регистр сведений. следующий 100 считал - в регистр сведений. по 100к строк. Как минимум если чо регистр почистить быстро можно. А вот справочник - замахаешся чистить. Там где его дальше юзать нужно будет - создавай элементы по мере необходимости. Нужен юзеру элемент - поиск - нет в справочнике. нашли в регистре - создали. |
|||
59
Maniac
06.07.17
✎
21:17
|
по 100к строк думаю отработка будет на цикл чтение и запись если там ничо сложного - ну секунд 30.
30 на 30 = 900 секунд. За 15 минут ты это все загрузишь в регистр сведений. 30 лямов строк. В справочник я бы не грузил - сначала нужно понять что это и зачем оно. |
|||
60
Maniac
06.07.17
✎
21:18
|
блин ошибся.100к если 30 секунд.
То 30 лямов это умножить на 300. 9000 секунд. полтора часа |
|||
61
datog
06.07.17
✎
21:32
|
я ошибся. там 107 миллионов строк
|
|||
62
d4rkmesa
06.07.17
✎
21:41
|
20 миллионов строк без особых проблем грузил, наверное и 100 загрузится, я так понял, операция одноразовая?
|
|||
63
Maniac
06.07.17
✎
21:42
|
(61) ууу чувак.
Могй дать человека который тебе СУБД накидает. А уже из нее будешь в 1С таскать только то что надо. Забудь про то чтобы в 1С это грузить. Я уверен тебе будет стоять задача обновлять. А значит возникнет момент синхронизации - поиска. Вот тут все дело и погибнет. |
|||
64
МихаилМ
06.07.17
✎
22:08
|
(61)
значит я угадал: выгрузите list_of_expired_passports на хабре есть статья с его участием. |
|||
65
datog
06.07.17
✎
22:23
|
спасибо , я должен сам решить эту задачу.
|
|||
66
Фрэнки
07.07.17
✎
09:13
|
характерный поиск яндекс выдает по list_of_expired_passports
--- TopDownloads - Архивы - list_of_expired_passports.csv.bz2 topdownloads.ru›…file/list_of_expired_passports… Закачать: http://guvm.mvd.ru/upload/expire.../list_of_expired_passports.csv.bz2 Файл расположен на: http://guvm.mvd.ru Для быстрой и надежной закачки используйте Download Master. 2 Как загрузить файлик с ресурса guvm.mvd.ru | Форум forum.mista.ru›Раскрути›?id=778059 HTTPЗапрос = Новый HTTPЗапрос("upload/expired-passports/list_of_expired_passports.csv.bz2") ... This response is only cacheable if indicated by a Cache-Control or Expires header field. 3 Почему Go превосходит посредственность / Хабрахабр habrahabr.ru›post/260451/ ? ? Задачка: Есть база невалидных паспортов http://www.fms.gov.ru/upload/expired-passports/list_of_expired_passports.csv.bz2 требуется утилитка для проверки паспорт нормальный или нет. 4 bulk insert и гигантский файл / Microsoft SQL Server / Sql.ru sql.ru›Форум›…insert-i-gigantskiy-fayl Пытаюсь закачать в базу файл недействительных паспортов list_of_expired_passports.csv Файл весит 1 гигабайт и содержит порядка 80 млн записей в формате 5 Система межведомственного электронного... | Форум bankir.ru›dom/forum/департамент-технологий/… 2. Как найти "авторов" этого решения в ФМС и попросить их о следующем : файл list_of_expired_passports.csv.bz2 должен быть назван так : 20140618-235959-list_of_expired_passports.csv.bz2 (примерно!!!) |
|||
67
Кирпич
07.07.17
✎
09:22
|
(65) "я должен сам решить эту задачу" :)
А нафиг тогда на мисте ветки создавать. |
|||
68
Базис
naïve
07.07.17
✎
10:01
|
А какие поля в этой табличке?
|
|||
69
МихаилМ
07.07.17
✎
10:05
|
(68)
серия и номер (паспорта) |
|||
70
datog
07.07.17
✎
10:43
|
(67)спросить совета
|
|||
71
Maniac
07.07.17
✎
10:44
|
это явно БД не для 1С и в 1С нафиг не нужна
|
|||
72
МихаилМ
07.07.17
✎
10:46
|
(71)
скажите это 1с про кладр |
|||
73
Maniac
07.07.17
✎
10:48
|
(72) ему тоже
|
|||
74
Maniac
07.07.17
✎
10:49
|
уже давно все через сервисы работает
|
|||
75
Кирпич
08.07.17
✎
21:06
|
Пробовал загружать в sqlite. Загрузилось за 7 минут на i5 без ssd.
|
|||
76
Garykom
гуру
08.07.17
✎
22:16
|
(75) В данном случае не надо ничего никуда "грузить".
Надо читать в поток файл и создавать "индекс" в какой то БД (можно и в sqlite и даже в 1С). Этот индекс это по сути подсистема для быстрого нахождения мест в исходном текстовом файле на диске. Кнут велик https://www.opennet.ru/base/dev/build_search_index.txt.html По сути пишем свой "движок текстовой БД" не трогая/не изменяя исходные данные и работая только с индексом. |
|||
77
Garykom
гуру
08.07.17
✎
22:20
|
(66) Будешь смеяться но задача уже баян (для нас) ибо http://www.fedsfm.ru/news/355
|
|||
78
МихаилМ
08.07.17
✎
22:24
|
я бы попробовал применить
Задача на поиск в массиве |
|||
79
Garykom
гуру
08.07.17
✎
22:25
|
(77)+ Пришел к нам покупать золото, мы просим для скидки получить нашу карту. Чтобы получить карту надо заполнит простую анкету.
Там есть серия/номер - говорим "это на случай утери карты с бонусами чтобы восстановить". Если некто указал "недействительный паспорт", мы обязаны это обнаружить и настучать в течении 7 дней. "Подпунктом 3 пункта 1 статьи 7 Федерального закона № 115-ФЗ закреплена обязанность организаций в случае возникновения сомнений в достоверности и точности ранее полученной информации обновить сведения о клиенте, его представителях, выгодоприобретателях и бенефициарных владельцах в течение семи рабочих дней, следующих за днем возникновения таких сомнений." |
|||
80
Garykom
гуру
08.07.17
✎
22:28
|
(76)+ Прикольно практически к тому же что и мы пришли https://habrahabr.ru/post/307568/
|
|||
81
Garykom
гуру
08.07.17
✎
22:33
|
(80)+ Только я еще сверху хеш-функцию навернул по "множеству уникальных цифр в паспорте" для выделения блока в котором нуна искать дальше.
К примеру есть паспорт серия 1111 222222, цифры только (1,2) - итого поиск сразу сокращается и далее уже их метод по номеру. |
|||
82
Кирпич
09.07.17
✎
08:46
|
(76) "Надо читать в поток файл и создавать "индекс" в какой то БД"
а я мля что сделал? создал индекс в sqlite. |
|||
83
Кирпич
09.07.17
✎
08:50
|
(80) нафига изобретать велосипед, если можно тупо загрузить в проверенный годами sqlite или berkeleyDB
|
|||
84
datog
18.07.17
✎
08:21
|
как теперь ускорить поиск по таблице в ms sql ?
|
|||
85
2dolist
18.07.17
✎
08:31
|
(44) а как запустить запись многопоточно?
|
|||
86
Два Плюс Два
18.07.17
✎
08:36
|
(0) ADO Stream
|
|||
87
Lama12
18.07.17
✎
08:36
|
(84) Индексы?
|
|||
88
Два Плюс Два
18.07.17
✎
08:45
|
(84) Агрегаты. Если в оборотный регистр загрузишь. Только пересчитывать агрегаты надо вручную. Но если массив не меняется, то гут.
|
|||
89
Два Плюс Два
18.07.17
✎
08:46
|
Справочник делать не надо. Да и РС не факт что лучше оборотного регистра. Смотреть надо что грузишь... Чего потом иметь хочешь.
|
|||
90
xaozai
18.07.17
✎
09:36
|
(84) Добавьте индексы для полей поиска.
|
|||
91
datog
18.07.17
✎
15:33
|
сделал индекс, все стало работать быстрее.
а как быть с кодировкой? как ее корректно отобразить в 1с? |
|||
92
МихаилМ
19.07.17
✎
10:32
|
заведите отдельную тему . опишите проблему подробней
|
|||
93
Кирпич
19.07.17
✎
11:22
|
(91) У тяебя ж там одни цифры. Накой тебе кодировка?
|
|||
94
datog
21.07.17
✎
17:18
|
(93) в файле есть серии символьные.и по 2 или 5 символов
|
|||
95
Кирпич
21.07.17
✎
18:16
|
(94) ага. там чего только нету
V-ЖЕ,646871 5ЕР6,94819 7СИ6,55479 CC88,3567 3ИР0,144478 15ЕР,709342 CC02,04167 18АГ,536340 5ЕР6,61547 13ЕР,740466 7ЕР7,19918 13ЮС,622545 9ЕР7,43617 16ЕР,613268 5-,685604 ЕС,765036 1ЖЕ,317072 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |