J'utilise ibatis pour mon stmt d'insertion sql. Dans mon code, j'analyse les fichiers ligne par ligne à partir d'un dossier. Chaque ligne correspondant aux critères doit être insérée dans la base de données. Le nombre total d'insertion dans une seule série de programme peut être n'importe où le long de 200k.ibatis: améliore les performances d'insertion
SqlSession sess = null;
this.sess = sf.openSession(ExecutorType.BATCH, false);
for (each file) {
for(each line matching criteria){
this.sess.insert("com.logs.util.insertFileInfo", fileData);
insertcount++;
if(insert count == 10)
this.sess.commit();
}
}
if(insert count > 0){
this.sess.commit();
}
}
Ce style prend lentement beaucoup de mémoire et après quelques temps throws Exception OutOfMemory. Comment puis-je améliorer les performances ici?
vient de mettre à jour l'algo – changed
Avec ce changement, vous commettrez après les 10 premières lignes et ensuite après chaque fichier si une validation est requise ou non; ça ne sonne pas vraiment bien. Si un fichier contient (disons) 50K lignes, alors ces 50K éléments devront être tamponnés quelque part. Ils seront conservés par Ibatis, le pilote JDBC sous-jacent ou le SGBD. Si vous utilisez l'opérateur mod (%), vous ne tamponnerez jamais plus de 10 modifications en attente. De plus, n'oubliez pas de valider la session une fois la boucle externe terminée. – PhilDin