3 votes

Comment analyser efficacement 200 000 fichiers XML en Java ?

J'ai 200 000 fichiers XML que je veux analyser et stocker dans une base de données.

En voici un exemple : https://gist.github.com/902292

C'est à peu près aussi complexe que les fichiers XML peuvent l'être. Il sera également exécuté sur un petit VPS (Linode), la mémoire est donc limitée.

Ce que je me demande, c'est :

1) Dois-je utiliser un analyseur DOM ou SAX ? DOM semble plus facile et plus rapide puisque chaque XML est petit.

2) Où se trouve un tutoriel simple sur ce parseur ? (DOM ou SAX)

Gracias

EDIT

J'ai essayé la route DOM même si tout le monde a suggéré SAX. Principalement parce que j'ai trouvé un tutoriel "plus facile" pour DOM et j'ai pensé que la taille moyenne des fichiers étant de 3k - 4k, il serait facilement capable de contenir cela en mémoire.

Cependant, j'ai écrit une routine récursive pour traiter l'ensemble des 200 000 fichiers et elle arrive à environ 40 % de leur parcours, puis Java manque de mémoire.

Voici une partie du projet. https://gist.github.com/905550#file_xm_lparser.java

Dois-je abandonner DOM maintenant et utiliser SAX ? Il me semble juste qu'avec de si petits fichiers, DOM devrait être capable de le gérer.

De plus, la vitesse est " assez vite ". Il faut environ 19 secondes pour analyser 2000 fichiers XML (avant l'insertion dans Mongo).

Gracias

0voto

StAX est plus rapide que SAX et ceci est beaucoup plus rapide que DOM. Si les performances sont super critiques, vous pouvez également penser à construire un compilateur spécial pour analyser les fichiers XML. Mais généralement, l'analyse lexicale et syntaxique n'est pas un problème majeur avec StAX, mais le "post-traitement".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X