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!