Maison > base de données > tutoriel mysql > Comment puis-je traiter efficacement 90 millions d'enregistrements avec Hibernate sans manquer de mémoire ?

Comment puis-je traiter efficacement 90 millions d'enregistrements avec Hibernate sans manquer de mémoire ?

Susan Sarandon
Libérer: 2024-12-03 16:34:12
original
245 Les gens l'ont consulté

How Can I Efficiently Process 90 Million Records with Hibernate Without Running Out of Memory?

Utilisation de ScrollableResults d'Hibernate pour lire 90 millions d'enregistrements de manière incrémentielle

L'interface ScrollableResults d'Hibernate fournit un moyen de parcourir les résultats d'une requête sans charger l'ensemble des résultats en mémoire. Cependant, comme le souligne cette question, l'utilisation de ScrollableResults avec un grand nombre d'enregistrements peut entraîner des problèmes de mémoire si le pilote MySQL Connector/J est utilisé.

Dans de tels cas, la seule option pratique est de parcourir les résultats. par lots à l'aide des méthodes setFirstResult et setMaxResults. Bien que cette approche puisse sembler inefficace, en particulier lorsqu'il s'agit de décalages importants, elle constitue le moyen le plus fiable d'éviter les problèmes de mémoire.

Idéalement, une session sans état devrait être utilisée pour éviter tout problème de mise en cache ou de suivi incorrect au niveau de la session. .

Une autre optimisation potentielle consiste à utiliser le champ id comme dernière colonne de l'index et à modifier la requête pour récupérer un lot d'enregistrements à la fois, en utilisant l'identifiant le plus élevé du lot précédent comme point de départ. indiquer. Cela peut améliorer les performances si d'autres conditions dans la requête utilisent des conditions d'égalité.

En modifiant la requête comme suit :

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

vous pouvez éviter les pertes de performances causées par le chargement de décalages importants et obtenir un résultat plus processus d'itération efficace.

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