90 Millionen Datensätze mit Hibernates Limited ScrollableResults streamen
Trotz seines Namens ist Hibernates ScrollableResults nicht für die effiziente Verarbeitung großer Ergebnismengen geeignet. Wie ein Benutzer festgestellt hat, führt der Versuch, es mit 90 Millionen Datensätzen zu verwenden, zu einem OutOfMemoryError, da der Treiber den gesamten Ergebnissatz in den Speicher lädt.
Die Alternative setFirstResult und setMaxResults ist auch für große Datensätze unpraktisch auf die Zeit, die benötigt wird, um höhere Offsets zu erreichen.
Eine Lösung besteht darin, Datensätze manuell mithilfe von SQL-Abfragen abzurufen. Durch die Angabe einer Bedingung für den Primärschlüssel und die Begrenzung der Anzahl der zurückgegebenen Datensätze können Datenblöcke gestreamt werden, ohne den Speicher zu überlasten.
Ein anderer Ansatz besteht darin, die setFirstResult/setMaxResults-Strategie zu ändern. Anstatt den Offset schrittweise zu erhöhen, kann man den maximalen Primärschlüsselwert des vorherigen Stapels verwenden, um den nächsten Stapel abzurufen. Diese Methode ist besonders effektiv, wenn die Tabelle nach dem Primärschlüssel geordnet ist und zusätzliche Bedingungen Gleichheitsvergleiche verwenden, die auf die letzte indizierte Spalte beschränkt sind.
Durch Befolgen dieser Strategien kann man die Einschränkungen der ScrollableResults von Hibernate umgehen und effizient verarbeiten große Datensätze im Streaming-Modus.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Hibernate 90 Millionen Datensätze effizient streamen und dabei OutOfMemoryErrors vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!