Maison >base de données >tutoriel mysql >Comment puis-je diffuser efficacement des ensembles de résultats volumineux à partir de MySQL pour éviter les erreurs OutOfMemoryErrors ?
Diffusion en continu de grands ensembles de résultats à partir de MySQL
Récupérer de grands ensembles de résultats à partir de MySQL peut être difficile, surtout si la mémoire de l'application est limitée. Ce problème est souvent rencontré lorsque le pilote JDBC tente de charger la table entière en mémoire, ce qui entraîne une exception OutOfMemoryException.
Utilisation de setFetchSize()
Une solution courante à ce problème Le problème est d'utiliser la méthode setFetchSize() pour limiter le nombre de lignes extraites de la base de données. Cependant, cette approche seule n'est pas toujours suffisante, car le pilote MySQL JDBC nécessite des paramètres supplémentaires pour activer le streaming.
Création d'une instruction en avant seule et en lecture seule
Pour activer le streaming des jeux de résultats dans MySQL, une instruction doit être créée avec les paramètres suivants :
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
Définition de la récupération Size
Une fois l'instruction créée, la méthode setFetchSize() doit être utilisée pour indiquer au pilote que de grands ensembles de résultats peuvent être récupérés :
stmt.setFetchSize(Integer.MIN_VALUE);
Mises en garde concernant le streaming
Il est important d'être conscient des limites et des mises en garde du résultat set streaming :
Considérations supplémentaires
Si l'erreur OutOfMemoryError persiste malgré l'utilisation les paramètres ci-dessus, cela peut indiquer que l'application ne traite pas les données immédiatement dès qu'elles deviennent disponibles. Cela nécessite de restructurer le code pour traiter les données de manière incrémentielle afin d'éviter de conserver l'ensemble des résultats en mémoire.
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!