В настоящее время я использую LIBXML :: SAXParser :: Callbacks для анализа большого XML-файла, содержащего данные 140 000 продуктов. Я использую задачу для импорта данных этих продуктов в мое приложение rails.
Мой последний импорт занял чуть менее 10 часов:
rake asi:import_products --trace 26815.23s user 1393.03s system 80% cpu 9:47:34.09 total
Проблема с текущей реализацией заключается в том, что сложная структура зависимостей в XML означает, что мне нужно отслеживать весь узел продукта, чтобы знать, как правильно его анализировать.
В идеале, я хотел бы, чтобы я мог обрабатывать каждый узел продукта отдельно и иметь возможность использовать XPATH, размер файла ограничивает нас от использования метода, который требует загрузки всего файла XML в память. Я не могу контролировать формат или размер исходного XML. У меня есть максимум 3 ГБ памяти, которую я могу использовать в процессе.
Есть ли лучший способ, чем этот?
Текущий код задачи Rake:
Фрагмент XML-файла: