Параллельный синтаксический анализ XML в Java

Я пишу приложение, которое обрабатывает множество XML-файлов (> 1000) с глубокими структурами узлов. При использовании woodstox (Event API) требуется около шести секунд для анализа файла с 22 000 узлов.

Алгоритм помещается в процесс взаимодействия с пользователем, для которого приемлемо время отклика всего несколько секунд. Поэтому мне нужно улучшить стратегию обработки файлов xml.

  1. Мой процесс анализирует файлы xml (извлекает только несколько узлов).
  2. Извлеченные узлы обрабатываются, и новый результат записывается в новый поток данных ( в результате получается копия документа с измененными узлами).

Теперь я думаю о многопоточном решении (которое лучше масштабируется на оборудовании 16 Core +). Я подумал о следующих стратегиях:

  1. Создание нескольких синтаксических анализаторов и их параллельное выполнение в источниках xml.
  2. Переписываю свой алгоритм синтаксического анализа с сохранением потоков, чтобы использовать только один экземпляр синтаксического анализатора (фабрики, ... )
  3. Разделить исходный XML-код на части и назначить эти части нескольким потокам обработки ( map-reduce xml - serial )
  4. Оптимизация моего алгоритма (лучше парсер StAX, чем woodstox?) / Использование парсера со встроенным параллелизмом

Я хочу улучшить как общую производительность, так и производительность "для каждого файла".

Есть ли у вас опыт решения таких проблем? Как лучше всего пойти?

11
задан Martin K. 17 November 2010 в 20:20
поделиться