![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Error202 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 5.11.2004 Где: Moscow Репутация: нет Всего: нет |
Есть XML файл товаров ~ 300Mb
Задача распарсить, перебрать товары... Я использую XML::Twig для этого, в момент перебора товаров смотрю бд на наличие, если нет, добавляю и если есть какие-нть изменения - обновляю... Вся процедура занимает n*k часов выжирает всю память сервера начисто... Что я делаю неправильно и как можно решить подобную задачу, чтобы сервер во время обновления остался работоспособным? |
|||
|
||||
| MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
Может быть как-то порезать XML на части, если это возможно.
-------------------- MaXL |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Error202, XML::Twig можно использовать по-разному, Вы грузите весь файл в память или используете вариант, описанный в разделе "Processing an XML document chunk by chunk" документации?
Я раньше тоже использовал XML::Twig, потом перешел на XML::Parser, он побыстрее, но требует большего объема кода и немного сложнее. У меня файлы побольше, например, книжный прайс с ozon.ru - 1.76 Гб, books.ru - 849 Мб, my-shop.ru - 830 Мб, остальные поменьше. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Error202 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 5.11.2004 Где: Moscow Репутация: нет Всего: нет |
MaXL, попробую, посмотрю, спасибо
ginnie, я видел Ваши сообщения на эту тему в поиске, видел что Вы пришли к XML::Parser... Если Вас не затруднит, не могли бы Вы показать какой-нть небольшой примерчик использования XML::Parser для этих целей...? Это сообщение отредактировал(а) Error202 - 21.2.2012, 11:41 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Error202, посмотрите мой парсер для Лабиринта (прикреплен к сообщению). Парсер обрабатывает не все поля, а только те, которые мне нужны. Возникнут вопросы - задавайте (я, правда, писал его пару лет назад, но надеюсь, вспомню что там к чему :о)
Это сообщение отредактировал(а) ginnie - 21.2.2012, 11:53 Присоединённый файл ( Кол-во скачиваний: 19 )
labirint.pl 10,20 Kb-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Error202 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 5.11.2004 Где: Moscow Репутация: нет Всего: нет |
Спасибо!!
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Error202, нашел еще вариант на XML::Twig, выкладываю для разнообразия (возможно он под старый XML-формат, но для понимания способа обработки подойдет).
Присоединённый файл ( Кол-во скачиваний: 6 )
labirint_twig.pl 5,03 Kb-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Error202 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 5.11.2004 Где: Moscow Репутация: нет Всего: нет |
При парсинге, где-то на серидине XML возникает ошибка:
not well-formed (invalid token) at Видимо где-то в файле есть данные в неверной кодировке. Можно ли как-то пропускать такие ошибки? P.S. используя XML::Parser |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Error202, как это обойти в XML::Parser я не нашел, поэтому делаю предварительную замену таких символов в файле.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Error202 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 5.11.2004 Где: Moscow Репутация: нет Всего: нет |
ginnie, Спасибо!
А как можно вычислить, что там дает сбой? Файл 2Гб и посмотреть довольно сложно... |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Error202, в сообщении об ошибке выводится позиция в файле. Вывожу фрагмент файла в районе этой позиции (скрипт в несколько строчек) и ищу некорректные символы.
По-хорошему, ошибку должны исправлять создатели файла, но обычно с книжными магазинами начинается такая тягомотина, что желание добиться исправлений очень быстро пропадает. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Error202 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 5.11.2004 Где: Moscow Репутация: нет Всего: нет |
Логично... Я как-то не обратил внимание... Спасибо!
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |