четверг, 21 июля 2011 г.

Re: Nokogiri + 70Mb XML + 512RAM on Server

Приветствую!

Классически при работе с XML есть 2 пути: dom и sax

Первый вариант подразумевает, что весь файл будет обработан и будет
построено "дерево" узлов.

Второй вариант - событийный, то есть xml выступает в качестве потока,
который проходит через парсер - и при возникновении событий -
срабатываются обработчики установленные разработчиком. Весь файл не
подгружается в этом случае.

Может быть вам попробовать переписать логику на SAX?

http://nokogiri.org/Nokogiri/XML/SAX.html

Есть ещё такой пример:
http://www.pauldix.net/2009/01/sax-machine-sax-parsing-made-easy.html
используется
https://github.com/pauldix/sax-machine
(так же на базе Nokogiri)

С уважением,
Илья


On Jul 21, 1:31 pm, Igor Kasyanchuk <igorkasyanc...@gmail.com> wrote:
> Подскажите как можно сделать следущее, есть файлик 70Мб (ХМЛ), и надо
> его парсить и писать даные в базу (удаляя старые, ну или можно
> обновлять, не знаю что быстрее будет). Но вот когда начинается процес
> обработки xml сервер глохнет намертво, смотрю px aux а процес занял
> 54% памяти, и сам сайт уже не отвечает. Скажите если ли другие решения
> такой проблемы? Мне впринципе не так уж важно будет ли скрипт работать
> 1 мин или 5 мин, главное что бы сайт работал. Спасибо
>
>   doc = Nokogiri::XML(File.read("#{FILE_NAME}.xml"))
>
>   doc.xpath("//forecast").each do |forecast|
>     city_id = forecast.attributes["city"]
>
>     next unless city_id
>
>     city_id = city_id.to_s.to_i
>
>     city = City.find_by_weather_city_id(city_id)
>
>     next unless city
>     city.weathers.except_today.delete_all

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий