Heim > Datenbank > MySQL-Tutorial > Wie kann ich mit Hibernate effizient 90 Millionen Datensätze aus MySQL abrufen, ohne dass mir der Speicher ausgeht?

Wie kann ich mit Hibernate effizient 90 Millionen Datensätze aus MySQL abrufen, ohne dass mir der Speicher ausgeht?

DDD
Freigeben: 2024-12-05 13:00:11
Original
592 Leute haben es durchsucht

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

Optimierungsstrategien zum Lesen großer Ergebnismengen mit Hibernate

Dieser Artikel befasst sich mit der Herausforderung, 90 Millionen Datensätze aus einer MySQL-Datenbank mit Hibernate ohne zu lesen RAM wird überlastet.

ScrollableResults Einschränkungen

Zunächst versuchte der Benutzer, die ScrollableResults von Hibernate zu nutzen, um Ergebnisse inkrementell zu streamen. Allerdings bietet die MySQL Connector/J-Bibliothek keine echten Bildlauffunktionen und lädt den gesamten Ergebnissatz in den Speicher, was zu einer OutOfMemoryError-Ausnahme führt.

setFirstResult/setMaxResults vs. ScrollableResults

Um dieses Problem zu umgehen, erwog der Benutzer, setFirstResult und setMaxResults iterativ zu verwenden Holen Sie sich Stapel von Ergebnissen. Dieser Ansatz kann jedoch insbesondere bei großen Ergebnismengen ineffizient sein, da für jeden Batch ein Mehraufwand für die Initialisierung einer neuen Abfrage entsteht.

Optimierter Batch-Abruf mit Native SQL

Die vom Befragten vorgeschlagene optimalste Lösung bestand darin, aus dem MySQL J/Connector auszubrechen und eine Batch-Abfrage zu verwenden:

select * 
from person 
where id > <max_id_of_last_batch> and <other_conditions> 
order by id asc  
limit <batch_size>
Nach dem Login kopieren

Dies Die Abfrage erfasst einen Stapel von Datensätzen basierend auf einer zuvor ermittelten maximalen ID aus dem vorherigen Stapel und ordnet sie in aufsteigender Reihenfolge nach ID. Der Parameter „batch_size“ bestimmt die Anzahl der Datensätze, die gleichzeitig abgerufen werden sollen. Dieser Ansatz stellt sicher, dass nur eine überschaubare Anzahl von Datensätzen im Speicher verarbeitet wird, wodurch eine Speichererschöpfung vermieden wird.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Hibernate effizient 90 Millionen Datensätze aus MySQL abrufen, ohne dass mir der Speicher ausgeht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage