Heim > Java > javaLernprogramm > Wie führe ich Masseneinfügungsaktualisierungsvorgänge im Ruhezustand durch?

Wie führe ich Masseneinfügungsaktualisierungsvorgänge im Ruhezustand durch?

WBOY
Freigeben: 2023-08-27 23:17:06
nach vorne
1408 Leute haben es durchsucht

Wie führe ich Masseneinfügungsaktualisierungsvorgänge im Ruhezustand durch?

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
}
Nach dem Login kopieren

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
Nach dem Login kopieren

Jetzt müssen wir die Persistenzfunktion von EntityManager ausführen, um Daten in die Datenbank einzufügen

Beispiel

@Autowired
private EntityManager entityManager;
@Test
Public void InsertInBatch(){
   for (int i = 0; i < 6; i++) {
      Parent parent = Parent[i];
      entityManager.persist(parent);
   }
}
Nach dem Login kopieren

Ausgabe

"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"]]
Nach dem Login kopieren

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
Nach dem Login kopieren

Beispiel

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);
   }
}
Nach dem Login kopieren

Hibernate bündelt diese Anweisungen nun in einem Stapel und führt sie aus.

Ausgabe

"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"]]
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
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