-
Problème de performance
Bonjour à tous,
Voici mon problème :
Mon application doit traiter des fichiers de gros volumes (fichiers pouvant faire entre 30 000 et 100 000 lignes).
Sur certaines lignes (environ 40 % des lignes du fichier), je dois aller interroger ma base de données pour vérifier si celle-ci apparait dans le catalogue. J'ai donc une fonction dans un DAO qui va interroger le catalogue à partir d'un libellé.
Au début du traitement du fichier, cette fonction a des perfs tout à fait normales, mais au fur et à mesure de l'avancement du traitement, cela peut prendre plus d'une seconde (voire plusieurs secondes).
Est-ce que vous auriez des idées sur les causes possibles ?
J'ai fais des analyses de la mémoire, rien ne me semble choquant. Peut-être est-ce un problème dans la gestion des transactions ?
Merci d'avance.
-
Je pencherais aussi pour un problème transactionnel. Peux tu nous dire quelle implémentation tu utilises?
Assure toi de ne pas faire de transactionnel ou il n'en faut pas, tu vas faire un certain nombre de select et de vérification avant de décider ou non de persister l'objet, ouvre ta transaction qu'au moment de persister, ce qui t'evitera de travailler en mode transactionnel lorsque tu décides de ne pas insérer tes lignes.
Ceci dit cela n'explique pas le comportement que tu décris. J'ai eu un problème similaire, qui était du à du cascade all et du merge, hibernate se metait à générer autant de requetes externes que de tuples dans la table d'association que je remplissait, ce qui au fur et a mesure que je la remplissait mettait de plus en plus de temps. J'ai finis par faire un show sql pour m'en rendre compte, et y remedier.
Je te conseil donc de lancer en débug+show sql et de voir quelles sont les requetes générés, il est possible qu'elles soient mal formées ou que tu ramenes des données inutiles.