BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
rvc44 Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Приветствую, коллеги!
Появилась задача распарсить XML-файл размером 3,141,829,712 байт. Естественно, что из-за ограничений функции FileToStr не будет работать конструкция вида:
Функция FOPEN тоже не подойдет, поскольку она работает с файлами до 2Гб, после чего сбивается навигация по FSEEK. Решил попытать удачу через API, используя вот эти функции:
Всё бы замечательно, но у функции REPLICATE также ограничение на максимальную строку в 16,777,184 байт То есть 20-ти мегабайтный буфер уже не создашь, не говоря про буфер размером 3,141,829,712 байт. При выделении памяти под буфер большого размера, решил прибегнуть к хитрости, которую рекомендовал Rick Strahl:
Вот на этой строке вываливается ошибка Fatal error C0000005 Может буфер тоже выделять с помощью API-функций? Но там тоже непонятно, как в него/из него строку копировать
Опять будет Fatal error C0000005 при попытке копирования скроки lcString. LocalAlloc будет работать с таким размером буфера? Полагаю, вряд ли. Какие будут соображения? Исправлено 1 раз(а). Последнее : rvc44, 17.01.19 16:56 |
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
SAX-ом надо такой XML читать, потегово, пусть сам SAX-механизм выделяет буфер, большого буфера ему и не надо, размером в самое длинное содержимое тега ему достаточно.
|
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
rvc44 Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
А из под VFP можно SAX дергать? Ни у кого нет примеров, как это делать?
Недавно Игорь Королёв демонстрировал мастер-класс по использованию SAX из VFP, чтобы сделать beautify XML-файла:
Для использования SAX в VFP есть много непонятным моментов, например, как установить обработчик событий SAX-паресера contentHandler или как установить обработчик ошибок errorHandler. Исправлено 1 раз(а). Последнее : rvc44, 17.01.19 17:39 |
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
У меня нет. Использую самодельный (читает последовательно файл через буфер небольшой, вызывает подпрограмму обработки на каждый тэг). Громоздкий велосипед получился )
|
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
rvc44 Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Всё-таки FoxClub - лучший в мире сайт! Пошел читать forum.foxclub.ru
|
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
AndyNigmatec Сообщений: 1573 Откуда: Волгоград Дата регистрации: 28.06.2015 |
А такая фигня типа:
не прокатит? Исправлено 1 раз(а). Последнее : AndyNigmatec, 17.01.19 19:34 |
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
rvc44 Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
[attachment 30550 XML-Error.jpg]
Увы, не прокатывает! Честно попробовал. Минут 25 висели песочные часы. Нужно отметить, что аналогичный маленький файл всего с двумя записями за сотую долю секунды, причем корректно обрабатывает. Исправлено 2 раз(а). Последнее : rvc44, 17.01.19 22:32 |
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Конечно же нет. Даже для в 10 раз более мелкого файла (всего каких-то смешных 300Мб) скорее всего не хватит памяти. DOM грузит весь файл целиком, при том ещё и создаёт из банальных 20-50 символов XML-я полноценный объект на сотни, если не тысячи байт. Вообще тому кто придумал складывать в XML по 3Гб данных "надо гвоздь в голову забить" ------------------ WBR, Igor |
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
И еще тому, кто придумал создавать DOM в памяти, а не в файле...
|
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
rvc44 Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Насчет гвоздя полностью поддерживаю! ))
Вот результаты работы через SAX, спустя 18 минут после начала обработки: [attachment 30551 IsTooLarge.png] Уже лучше! Попробую не в DBF писать, а в CSV, чтобы потом в Excel подгрузить или сделать фильтр по региону и разбить на несколько мелких файлов. В результате работы SAX-парсера создался DBF-файл размером 2,147,482,057 байт, включающий 523648 записей. Каждая запись состоит из 41 символьного поля. Каждое символьное поле диной 100 символов (можно уменьшить размеры полей), поскольку никакого описания структуры файла не было. Исправлено 1 раз(а). Последнее : rvc44, 18.01.19 09:32 |
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
AndyNigmatec Сообщений: 1573 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Если не сложно, можете здесь выложить как именно через SAX ... чую тож придется по гвоздю плакать )))
|
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() Если задача разовая (принимать файл стабильной структуры), то можно написать приемник (детектор известных тегов) на основе API-функций в первом посте, и записывать результат в текстовый файл любого размера (теми же API-функциями), или в ДБФ нужной структуры (если результат влезает в 2Г)...
|
Re: BigData: Обработка XML-файла размером 3,141,829,712 байт | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну сделай в процедуре переключалку на новую таблицу, скажем, каждые 200к записей - потом уж по отдельности их окультурь, может конечный результат и в одну уместится
------------------ WBR, Igor |
© 2000-2024 Fox Club  |