Bonjour
je vais essayer d'expliquer simplement mon probleme
actuellement un programme a été fait avec JDOM. Il parse un fichier XML, modifie l'arborescence et enregistre le tout dans un autre fichier. Le problème est que la mémoire ne suit pas, meme en augmentation celle allouée à la JVM.
Concernant le fichier XML, on a un ensemble d'entités spatiales (absolues ou relatives) de ce genre la :
Pour chaque ES, on va faire des requetes dans une base de données Postgresql de facon à trouver des coordonnées, et on va ainsi rajouter plusieurs représentations possibles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <es id='' type=''> <esa type='' nom=''> <text></text> </esa> </es> <es> <esr text=''> <relation></relation> <esa></esa> </esr> </es>
sachant que la représentation peut etre un point :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 <es id='' type=''> <esa type='' nom=''> <text></text> <representation> <type table='' query='' /> <point><coordonnees></coordonnees></point> </representation> <representation> <type table='' query='' /> <point><coordonnees></coordonnees></point> </representation> </esa> </es> <es> <esr text=''> <relation></relation> <esa> <representation> <type table='' query='' /> <point><coordonnees></coordonnees></point> </representation> </esa> </esr> </es>
ou un polygone plus ou moins conséquent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <coordonnees>441500,1762200</coordonnees>
(y en a des bien plus gros)
Code : Sélectionner tout - Visualiser dans une fenêtre à part <frontieres>867825.944472697,2160996.99484836 868372.431235036,2162090.65577777 869084.124268086,2163639.49320755 869209.461064312,2163626.43251763 869284.2736127,2163756.8102819 869856.079782686,2163865.64936454 870012.235224419,2163855.10915864 870114.20025974,2163853.50521427 870200.011283848,2163621.16241468 870253.857987894,2163398.09957899 870290.290438716,2163039.15974116 870297.164486041,2163019.7978412 870472.108990463,2162524.52273143 870538.558114605,2162307.87567324 870608.100560043,2162100.62314639 870600.882810352,2161674.7759146 870608.215127499,2161592.97475144 870641.554257025,2161476.68878419 870668.019339226,2161404.51128727 870646.824359974,2161254.77162304 870630.097511483,2161135.96517178 870612.568690804,2161012.8051572 870569.491327568,2160855.50404092 870494.44964427,2160715.73174531 870492.043727706,2160646.18929987 870528.476178528,2160510.54143266 870522.976940668,2160418.77290087 870517.363135353,2160409.9512068 870460.308542555,2160320.24488921 870360.062019065,2160164.43314984 870293.612894924,2160116.31481857 870157.048488066,2160077.13274881 870064.707119,2160069.91499912 869909.239081999,2160020.99469566 869807.388614134,2160010.56905722 869779.434155012,2160012.86040632 869670.365937455,2160021.9112353 869361.721212562,2159996.82096257 869280.722021582,2160141.51965876 869095.008176351,2160231.3405438 869034.28742498,2160256.08711417 868951.340587258,2160274.30333959 868865.30042824,2160279.80257745 868459.273366242,2160421.29338489 868392.595107189,2160411.21144881 868262.102775469,2160394.14089795 868224.524650092,2160339.95049154 868116.258404723,2160338.91938444 868039.84191196,2160338.0028448 867825.944472697,2160996.99484836</frontieres>
sachant qu'il peut y avoir de tres multiples réponses (genre pas loin d'une 20aine pour une seule entité spatiale, parfois 0 pour une autre), on peut comprendre que la taille augmente de facon conséquente
un fichier de 76Ko devenant un fichier de 2,2Mo (en environ 7min)
Maintenant que je vous ai mis dans le contexte, meme s'il est dit dans la FAQ sur votre site, que JDOM est une API légère et rapide, j'ai l'impression que dans notre cas c'est trop lourd
Donc je cherche à déterminer quelle est la meilleure facon de remplacer cela.
Il y a évidemment SAX, qui est connu pour sa légèreté, mais pour pouvoir faire le requetage et la réalisation du fichier de sortie, je dois créer des objets ES - ESA - ESR. Donc je me demande si de cette facon c'est jouable (l'arborescence en JDOM doit prendre pas mal).
mais j'ai découvert qu'il existait d'autres API qui permettent de simplifier certains traitement tels que StAX
ou qui permettent de sérialiser/désérialiser des objets en XML (tel que XStream)
cela peut etre intéressant et pas trop lourd d'utiliser de telles API ?
Je cherche des conseils éclairés de personnes qui connaissent bien tout ca, de facon à essayer d'envisager les meilleurs choix possibles, histoire qu'on ne doivent pas encore rechanger par la suite, et avoir une bonne pérénité
sachant que le facteur temps est loin d'etre le plus important, car il s'agit d'une indexation et que forcément c'est censé etre fait rarement et qu'à certains moments, par contre le facteur consommation est forcément important car les documents peuvent etre relativement gros, et il est question de réaliser des webs services par la suite
je vous remerci d'avance
Partager