Hibernate Performance flush v verpflichten
Im erstellen einer hibernate-Komponente für die Interaktion mit großen eingehenden Daten bestehen, beide speichern(erstellen) und aktualisieren Sie die Daten mit einem Volumen in Millionen von Zeilen.
Ich bin mir bewusst, wie sich die Abweichungen um flush-v verpflichten, zum Beispiel flush-Synchronisation "dirty" - Daten in die persistente zugrunde liegenden Daten, und das flush ermöglicht die Synchronisation mit den zugrunde liegenden persistente Daten, ohne tatsächlich zu Begehen, so dass die Transaktion ein Rollback ausgeführt werden kann, wenn erforderlich. Commit im wesentlichen verpflichtet sämtliche persistente Daten in der Datenbank.
Im erstellen einer hibernate-Komponente für die Interaktion mit großen eingehenden Daten bestehen, beide speichern(erstellen) und aktualisieren Sie die Daten mit einem Volumen in Millionen von Zeilen.
Ich bin mir bewusst, wie sich die Abweichungen um flush-v verpflichten, zum Beispiel flush-Synchronisation "dirty" - Daten in die persistente zugrunde liegenden Daten, und das flush ermöglicht die Synchronisation mit den zugrunde liegenden persistente Daten, ohne tatsächlich zu Begehen, so dass die Transaktion ein Rollback ausgeführt werden kann, wenn erforderlich. Commit im wesentlichen verpflichtet sämtliche persistente Daten in der Datenbank.
Was ist eine angemessene Größe, eine batch einfügen? 50 der max Betrag für eine angemessene Leistung so etwas wie:
for (i < 1000000)
if(i % 50 ) {
session.flush()
}
Ich sammeln Sie 50 sollte dem Wert entsprechen, der in der hibernate.jdbc.batch_size 50
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kommt es auf Ihre Daten. Die batch-Größe ist ein Gleichgewicht zwischen der Menge der Elemente, die Winterschlaf halten, auf seine Sitzung, und die Latenz, die daran beteiligt Rundfahrten zu den db für die Spülung. Wenn Sie Ihre batch-Größe ist zu klein, werden Sie am Ende machen viele roundtrips zur db. Wenn der Stapel zu groß ist, werden Sie am Ende halten viele Objekte in hibernate-session - dies kann ein problem sein, wenn Ihre Objekte sind Fett.
Ich würde sagen, 50 ist ein low-Anzahl:
1M /50 = 20000
Rundreisen. Ich würde sagen, Sie starten mit einer größeren Anzahl und Messung der Leistung. Übrigens, dies gilt für die batch-Operationen nur:hibernate.jdbc.batch_size
50 ist für die regelmäßige app-Transaktionen.PS vergessen Sie nicht, deaktivieren der hibernate-session nach dem Spülen, sonst Winterschlaf halten wird, die gespeicherte Objekte im Speicher auch nach flush.