Salut à tous,
J'ai un problème de BDD à traiter sur de gros volumes de données...
En gros, en entrée j'ai un fichier que sur lequel j'effectue un traitement, pour stocker en bases les éléments. Il peut y avoir de 0 à n lignes, voici 2 traces d'exécutions pour un fichier de 1,10 Mo :
La trace 1 traite tout le fichier mais la ligne m_statementPreCreateDataLine.executeUpdate(); est mise en commentaire...Citation:
Trace 1
Nombre de lignes traitées : 19427
[DEBUG] Fin de lecture, durée=437
Trace 2
Nombre de lignes traitées : 19427
[DEBUG] Fin de lecture, durée=13968
La seconde effectue la sauvegarde en base... Imaginez ma stupeur lorsque j'ai essayé sur un fichier de 80 Mo pour le temps de traitement interminable... :?
J'ai une classe qui crée un thread l'initilise et joue avec les méthodes start stop et save trame (cf. source ci dessous pour celle ci)
source abbrégé :
Code:
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
33
34
35
36
37
38
39
40
41
42 class ThreadSaveData extends Thread implements Constantes { private static PreparedStatement m_statementPreCreateDataLine ; // prépare le format de la ligne de données public ThreadSaveData(Connection p_bddConnexion,String p_strNomTableData) { try { m_statementPreCreateDataLine = p_bddConnexion.prepareStatement("INSERT INTO "+p_strNomTableData+" VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); } catch (SQLException e) { System.err.println("erreur de préparation du statement dans le thread"); e.printStackTrace(); } } public void saveTrame(int p_iType, ArrayList p_tEltTable) { try { m_statementPreCreateDataLine.setString(g_bddTableData.m_iColTemps, (String)p_tEltTable.get(0)); // ... etcc ... String data = "" ; Integer val = new Integer((String)p_tEltTable.get(5)); for (int cpt=0 ; cpt < val ; cpt++) { data += (String)p_tEltTable.get(6+cpt) ; if (cpt!=(val-1)) data += "."; } m_statementPreCreateDataLine.setString(g_bddTableData.m_iColData, data); m_statementPreCreateDataLine.executeUpdate(); } catch (SQLException e) { System.err.println("erreur remplissage de statement"); e.printStackTrace(); } } }
Y a t il un moyen de résoudre cette lenteur ?? Merci d'avance pour votre aide :roll:
