En parallèle de l'Analyse XML en Java

Je suis en train d'écrire une application qui traite un lot de fichiers xml (>1000) avec une profonde nœud structures. Il faut environ six secondes avec woodstox (Cas de l'API) pour analyser un fichier avec 22.000 Nœuds.

L'algorithme est placé dans un processus d'interaction de l'utilisateur, où seulement quelques secondes de temps de réponse acceptables. J'ai donc besoin d'améliorer la stratégie pour gérer les fichiers xml.

  1. Mon processus d'analyse les fichiers xml (extraits seulement quelques nœuds).
  2. Noeuds extraits sont traités et le nouveau résultat est écrit dans un nouveau flux de données (une copie du document modifié de nœuds).

Maintenant, je suis en train de réfléchir à une multithread solution (qui évolue mieux sur 16 Core+ matériel). J'ai pensé aux stratégies suivantes:

  1. La création de plusieurs analyseurs et de les exécuter en parallèle sur les sources xml.
  2. La réécriture de mon algorithme d'analyse d'thread-enregistrer pour utiliser une seule instance de l'analyseur (usines, ...)
  3. Split de la source XML en morceaux et attribuer les morceaux à plusieurs threads de traitement (réduction de mappage xml - série)
  4. L'optimisation de mon algorithme (mieux StAX analyseur de woodstox?) /À l'aide d'un analyseur avec construire-dans la simultanéité

Je veux améliorer à la fois, la performance globale et la "fichier" de la performance.

Avez-vous une expérience avec de tels problèmes? Quelle est la meilleure façon de le faire?

  • Il n'est pas clair ce que doit être maximisé ici... la performance sur un SEUL fichier, ou le rendement total sur tous les 1000 fichiers.
  • Une suggestion: si vous pouvez quantifier la taille des fichiers, afin de permettre le calcul de partout (en mégaoctets par seconde traitées) ça peut donner une idée des performances attendues. En général, je reçois 10 - 40 MO/s pour l'analyse avec Woodstox lors de l'essai; mais mon disque dur ne peut produire de 5 à 10 MO/s vitesse soutenue.
InformationsquelleAutor Martin K. | 2010-11-17