Maison > base de données > tutoriel mysql > Comment puis-je diffuser efficacement 90 millions d'enregistrements avec Hibernate, en évitant les erreurs OutOfMemoryErrors ?

Comment puis-je diffuser efficacement 90 millions d'enregistrements avec Hibernate, en évitant les erreurs OutOfMemoryErrors ?

Linda Hamilton
Libérer: 2024-12-04 07:36:13
original
122 Les gens l'ont consulté

How Can I Efficiently Stream 90 Million Records with Hibernate, Avoiding OutOfMemoryErrors?

Diffusion de 90 millions d'enregistrements avec les ScrollableResults limités d'Hibernate

Malgré son nom, ScrollableResults d'Hibernate n'est pas adapté au traitement efficace de grands ensembles de résultats. Comme l'a découvert un utilisateur, tenter de l'utiliser avec 90 millions d'enregistrements entraîne une erreur OutOfMemoryError car le pilote charge l'ensemble des résultats en mémoire.

L'alternative, setFirstResult et setMaxResults, est également peu pratique pour les grands ensembles de données en raison au temps nécessaire pour atteindre des décalages plus élevés.

Une solution consiste à récupérer manuellement les enregistrements à l'aide de requêtes SQL. En spécifiant une condition sur la clé primaire et en limitant le nombre d'enregistrements renvoyés, des morceaux de données peuvent être diffusés sans surcharger la mémoire.

Une autre approche consiste à modifier la stratégie setFirstResult/setMaxResults. Au lieu d'augmenter progressivement le décalage, on peut utiliser la valeur de clé primaire maximale du lot précédent pour récupérer le lot suivant. Cette méthode est particulièrement efficace si la table est classée par clé primaire et que des conditions supplémentaires utilisent des comparaisons d'égalité limitées à la dernière colonne indexée.

En suivant ces stratégies, on peut contourner les limites des ScrollableResults d'Hibernate et traiter efficacement de grands ensembles de données en streaming.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal