Diffuser efficacement des résultats MySQL volumineux
Dans le contexte du développement d'applications Spring, la récupération de données à partir de tables MySQL colossales peut poser un formidable défi, potentiellement menant à OutOfMemoryExceptions. En effet, le comportement par défaut du pilote MySQL JDBC consiste à charger l'intégralité du jeu de résultats en mémoire.
Définition de la taille de récupération : une mesure insuffisante
Pour atténuer ce problème , les développeurs ont souvent recours à la définition de la taille de récupération à l'aide de la méthode Statement.setFetchSize(Integer.MIN_VALUE). Toutefois, cela ne constitue pas à lui seul une solution globale. Comme indiqué dans la documentation de Statement#setFetchSize(), la taille de récupération fournit simplement une indication au pilote, qui peut ou non être honorée.
Revisite de la documentation MySQL JDBC
Une analyse plus approfondie de la documentation du pilote MySQL JDBC révèle une approche plus nuancée de la diffusion de résultats volumineux. Pour activer le streaming, une déclaration doit être créée comme suit :
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
Avertissements concernant le streaming
La mise en œuvre de cette approche s'accompagne de certaines mises en garde :
Repensez l'allocation de mémoire
Si vous ne définissez pas la taille de récupération et ne modifiez pas la création de l'instruction Si vous résolvez l'erreur OutOfMemoryError, la cause première peut résider dans le stockage des données dans la mémoire Java. Au lieu de mettre en cache l’intégralité du jeu de résultats, envisagez de le traiter immédiatement dès qu’il devient disponible. Cela peut nécessiter des modifications substantielles du code, impliquant potentiellement une réécriture complète.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!