Я пишу приложение, которое обрабатывает множество XML-файлов (> 1000) с глубокими структурами узлов. При использовании woodstox (Event API) требуется около шести секунд для анализа файла с 22 000 узлов.
Алгоритм помещается в процесс взаимодействия с пользователем, для которого приемлемо время отклика всего несколько секунд. Поэтому мне нужно улучшить стратегию обработки файлов xml.
- Мой процесс анализирует файлы xml (извлекает только несколько узлов).
- Извлеченные узлы обрабатываются, и новый результат записывается в новый поток данных ( в результате получается копия документа с измененными узлами).
Теперь я думаю о многопоточном решении (которое лучше масштабируется на оборудовании 16 Core +). Я подумал о следующих стратегиях:
- Создание нескольких синтаксических анализаторов и их параллельное выполнение в источниках xml.
- Переписываю свой алгоритм синтаксического анализа с сохранением потоков, чтобы использовать только один экземпляр синтаксического анализатора (фабрики, ... )
- Разделить исходный XML-код на части и назначить эти части нескольким потокам обработки ( map-reduce xml - serial )
- Оптимизация моего алгоритма (лучше парсер StAX, чем woodstox?) / Использование парсера со встроенным параллелизмом
Я хочу улучшить как общую производительность, так и производительность "для каждого файла".
Есть ли у вас опыт решения таких проблем? Как лучше всего пойти?
задан Martin K. 17 November 2010 в 20:20
поделиться