Bonjour,
Je cherche le moyen le plus performant pour stocker/lire de très gros volumes de données, voici ma problématique plus en détail...
J'ai donc en entrée des fichiers xml openStreetMaps, qui sont structurés ainsi:
-1ere partie, des déclarations de nœuds de localisation ("node"), qui sont composés d'un id, d'une latitude et d'une longitude (et d'autres attributs qu'on ne veut pas stocker).
-2eme partie , des polygones ("way") qui utilisent les nœuds cités plus haut, en les référençant par leur id.
Un exemple :
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
26
27
28
29
30
31
32 <?xml version="1.0" encoding="UTF-8"?> <osm version="0.6" generator="CGImap 0.0.2"> <bounds minlat="43.5726470" minlon="3.9335430" maxlat="43.5729650" maxlon="3.9341380"/> <node id="959395420" lat="43.5728302" lon="3.9339762" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T13:06:28Z"/> <node id="959368838" lat="43.5727916" lon="3.9337729" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:47:41Z"/> <node id="959376852" lat="43.5728178" lon="3.9339493" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:53:25Z"/> <node id="959362732" lat="43.5726572" lon="3.9340831" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:44:13Z"/> <node id="959379795" lat="43.5728174" lon="3.9337521" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:55:35Z"/> <node id="959370195" lat="43.5728916" lon="3.9339189" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:48:24Z"/> <node id="959358463" lat="43.5726708" lon="3.9341107" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:42:41Z"/> <node id="959359821" lat="43.5728677" lon="3.9339398" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T12:43:13Z"/> <way id="82416819" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T13:21:37Z"> <nd ref="959379795"/> <nd ref="959368838"/> <nd ref="959359821"/> <nd ref="959370195"/> <nd ref="959379795"/> <tag k="building" v="yes"/> <tag k="note:import-bati" v="v0.3"/> <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/> </way> <way id="82415652" user="maouth-" uid="322872" visible="true" version="1" changeset="6125245" timestamp="2010-10-21T13:17:23Z"> <nd ref="959358463"/> <nd ref="959395420"/> <nd ref="959376852"/> <nd ref="959362732"/> <nd ref="959358463"/> <tag k="building" v="yes"/> <tag k="note:import-bati" v="v0.3"/> <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/> </way> </osm>
Étant donné que je parse les documents avec Sax, il faut que je stocke les noeuds quelque part pour pouvoir les utiliser quand j'arrive aux polygones.
Ca marche très bien en mémoire tant que la jvm a assez de mémoire pour stocker les noeuds, il me faut donc un autre mode de stockage pour les fichiers trop gros.
J'ai testé hsqldb en mode text .csv, ça marche bien mais c'est assez lent, et sur des fichiers vraiment trop gros ça a l'air de se casser la gueule au bout d'un moment.
Niveau volumétrie, sur de gros fichiers on tape sur plusieurs millions de noeuds à stocker, et donc plusieurs millions de requetes select à la suite.
J'ai testé hier avec mysql, les perfs sont catastrophiques, pires qu'avec hsqldb
Si quelqu'un à une idée pour ce genre de problématique je suis preneur
Merci.









Répondre avec citation
Partager