Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement 90 millions d'enregistrements à partir de MySQL en utilisant Hibernate sans manquer de mémoire ?

Comment puis-je récupérer efficacement 90 millions d'enregistrements à partir de MySQL en utilisant Hibernate sans manquer de mémoire ?

DDD
Libérer: 2024-12-05 13:00:11
original
593 Les gens l'ont consulté

How Can I Efficiently Fetch 90 Million Records from MySQL Using Hibernate Without Running Out of Memory?

Stratégies d'optimisation pour la lecture de grands ensembles de résultats avec Hibernate

Cet article aborde le défi de la lecture de 90 millions d'enregistrements à partir d'une base de données MySQL en utilisant Hibernate sans surcharge de la RAM.

ScrollableResults Limitations

Initialement, l'utilisateur a tenté d'utiliser ScrollableResults d'Hibernate pour diffuser les résultats de manière incrémentielle. Cependant, la bibliothèque MySQL Connector/J ne fournit pas de véritables capacités de défilement et charge l'intégralité du jeu de résultats en mémoire, ce qui entraîne une exception OutOfMemoryError.

setFirstResult/setMaxResults vs. ScrollableResults

En guise de solution de contournement, l'utilisateur a envisagé d'utiliser setFirstResult et setMaxResults pour récupérer de manière itérative des lots de résultats. Cependant, cette approche peut s'avérer inefficace, en particulier pour les grands ensembles de résultats, en raison de la surcharge liée à l'initialisation d'une nouvelle requête pour chaque lot.

Récupération de lots optimisée à l'aide de SQL natif

La solution la plus optimale suggérée par le répondant était de sortir du MySQL J/Connector et d'utiliser une requête par lots :

select * 
from person 
where id > <max_id_of_last_batch> and <other_conditions> 
order by id asc  
limit <batch_size>
Copier après la connexion

Cette requête récupère un lot d'enregistrements en fonction d'un ID maximum préalablement déterminé à partir du lot précédent et les classe par ID dans l'ordre croissant. Le paramètre batch_size détermine le nombre d'enregistrements à récupérer à la fois. Cette approche garantit que seul un nombre gérable d'enregistrements est traité en mémoire, évitant ainsi l'épuisement de la 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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal