In diesem Artikel erfahren Sie, wie Sie Masseneinfügungen/-aktualisierungen im Ruhezustand durchführen.
Immer wenn wir eine SQL-Anweisung ausführen, führen wir dies durch einen Netzwerkaufruf an die Datenbank durch. Wenn wir nun 10 Einträge in die Datenbanktabelle einfügen müssen, müssen wir 10 Netzwerkaufrufe durchführen. Stattdessen können wir Netzwerkaufrufe mithilfe der Stapelverarbeitung optimieren. Durch die Stapelverarbeitung können wir eine Reihe von SQL-Anweisungen in einem einzigen Netzwerkaufruf ausführen.
Um dies zu verstehen und umzusetzen, definieren wir unsere Entitäten −
@Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String name; // Getters //Setters }
Um die Stapelverarbeitung im Ruhezustand zu ermöglichen, müssen wir unserer Anwendung eine Eigenschaft hinzufügen
Eigenschaftendatei:spring.jpa.properties.hibernate.jdbc.batch_size=3
Jetzt müssen wir die Persistenzfunktion von EntityManager ausführen, um Daten in die Datenbank einzufügen
@Autowired private EntityManager entityManager; @Test Public void InsertInBatch(){ for (int i = 0; i < 6; i++) { Parent parent = Parent[i]; entityManager.persist(parent); } }
"batch":true, "querySize":1, "batchSize":3, "query":["insert into parent (name, id) values (?, ?)"], "params":[["P1","1"],["P2","2"],["P3","3"]] "batch":true, "querySize":1, "batchSize":3, "query":["insert into parent (name, id) values (?, ?)"], "params":[["P4","4"],["P5","5"],["P6","6"]]
Auf der Konsole können wir sehen, dass das Einfügen in die übergeordnete Tabelle mit einer Stapelgröße von 3 erfolgt.
Bei der Beibehaltung von Entitäten kann eine OutOfMemoryException auftreten, da Hibernate Entitäten im Persistenzkontext speichert. Daher können wir zu Optimierungszwecken nach jedem Stapel die Befehle „flush()“ und „clear()“ des Entity Managers verwenden.
Batch-Update bedeutet, eine große Datenmenge in einem Netzwerkaufruf zu aktualisieren.
Bei Batch-Updates ist der Vorgang derselbe. Wir müssen die folgenden zwei Anweisungen zur Anwendungseigenschaftendatei hinzufügen und dann den Aktualisierungsprozess durchführen.
spring.jpa.properties.hibernate.order_updates=true spring.jpa.properties.hibernate.batch_versioned_data=true
Code zum Aktualisieren der Daten−
@Autowired private EntityManager entityManager; @Test public void UpdateInBatch() { TypedQuery<Parent> query = entityManager.createQuery("SELECT p from Parent p", Parent.class); List<Parent> Parents = query.getResultList(); int i=1; for (Parent parent : Parents) { String s="Parent"+Integer.toString(i); i++; parent.setName(s); } }
Hibernate bündelt diese Anweisungen nun in einem Stapel und führt sie aus.
"batch":true, "querySize":1, "batchSize":3, "query":["update parent set name=? where id=?"], "params":[["Parent1","1"],[" Parent2","2"],[" Parent3","3"]] "batch":true, "querySize":1, "batchSize":3, "query":["update parent set name=? where id=?"], "params":[["Parent4","4"],["Parent5","5"],["Parent6","6"]]
Wie Sie in der Konsole sehen können, wird die Datenaktualisierung in der übergeordneten Tabelle mit einer Stapelgröße von 3 durchgeführt.
Das obige ist der detaillierte Inhalt vonWie führe ich Masseneinfügungsaktualisierungsvorgänge im Ruhezustand durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!