Maison >base de données >tutoriel mysql >Comment puis-je diffuser efficacement de grands ensembles de résultats MySQL pour éviter les erreurs de mémoire ?
Diffusion en continu de grands ensembles de résultats avec MySQL
Lorsque vous travaillez avec de grandes tables dans MySQL, une consommation excessive de ressources et des erreurs de mémoire peuvent survenir en raison de la valeur par défaut comportement des pilotes JDBC chargeant des jeux de résultats entiers en mémoire. Pour atténuer cela, il est essentiel de mettre en œuvre des techniques appropriées pour diffuser les données plutôt que de tout charger en même temps.
Approche
La question fournie suggère d'utiliser Statement.setFetchSize(Integer .MIN_VALUE); pour limiter le chargement des données, mais cela seul est insuffisant. Selon la documentation du pilote MySQL JDBC, définir l'ensemble de résultats sur TYPE_FORWARD_ONLY et CONCUR_READ_ONLY est nécessaire pour un streaming efficace :
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
Cependant, il est crucial de noter que cette approche présente des inconvénients potentiels :
Autres considérations
Si la définition du jeu de résultats sur TYPE_FORWARD_ONLY et CONCUR_READ_ONLY ne résout pas les problèmes de mémoire, la cause sous-jacente peut être le stockage des données dans La mémoire de Java avant son traitement. Pour résoudre ce problème, un traitement immédiat des données dès leur arrivée est nécessaire, ce qui peut impliquer des modifications importantes du code. Pour plus d'informations, reportez-vous au lien fourni dans la réponse, qui répond à un problème similaire.
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!