Bonjour à tous,
Après de nombreuses recherches sur le net ainsi que sur les forums de développez.com je fais toujours face à java.lang.OutOfMemoryError.
Au sein d'une application web un utilisateur à la possibilité d'afficher des statistiques diverses. Cela consiste donc à ramener des enregistrements de la base de donnée (MySql) puis d'effectuer des test afin de faire différents calculs. Le problème se situe sur le faite que ces statistiques peuvent s'opérer sur un nombre de ligne très important (Supérieur au millions). Par conséquent, lors de l'exécution de ma requête via hibernate puis récupération des résultats de la façon suivante
List result = (ArrayList) session.createSQLQuery(maRequete).list();
mon application provoque des java.lang.OutOfMemoryError logique.
Afin de palier à ce soucis j'ai donc procédé à une augmentation mémoire de la JVM tout en sachant que cela ne ferait que retarder ces problèmes.
D'après de nombreux postes, la solution consistant à ramener progressivement les enregistrements de la base de données était la meilleure.
j'ai donc effectué de nombreux test en ce sens en jouant dynamiquement sur le LIMIT de mes requêtes SQL. Effectivement je ne rencontre plus les problèmes de mémoires mais ces requêtes sont de plus en plus longues à s'exécuter plus j'avance dans les paliers (par tranche de 100000 par exemple).Le problème est que certaines contraintes me sont imposées notamment au niveau d'un temps de réponses raisonnables et donc je n'ai pu retenir cette solution.
Je me tourne donc vers vous pour avoir certains avis, ou certaines méthodes permettant de palier à ce problème. Si de plus amples informations vous sont nécessaires n'hésitez pas à me demander.
Merci par avance
Lands
Partager