2016-04-07 4 views

Antwort

3

Bellow ist mein Standpunkt:

bei Update() oder bacthUpdate() -Methode von NamedParameterJdbcTemplate Klasse von Spring-Framework

Sie sollten bacthUpdate() verwenden, so lange, wenn Sie ausführen müssen mehrere sql zusammen.

Gibt es eine Zeilenbeschränkung für update()?

Dies sollte von der verwendeten DB abhängen. Aber ich habe die Zeilenbeschränkung für die Aktualisierung nicht erreicht. Natürlich ist das Aktualisieren von wenigen Zeilen schneller als das Aktualisieren vieler Zeilen (z. B. UPDATE ... WHERE id=1 vs UPDATE ... WHERE id > 1).

Wie viele Zeilen kann update() verarbeiten, ohne Leistungsprobleme zu haben oder meine db hängen?

Das ist nicht sicher. Dies ist abhängig von der DB Sie verwenden, Maschinenleistung, etc. Wenn Sie das genaue Ergebnis wissen möchten, können Sie die DB Vendor Benchmark, oder Sie können es durch einige Tests messen.

Ab wie vielen Zeilen erhält batchUpdate() gute Leistung?

In der Tat ist batchUpdate() häufig verwendet, wenn Sie Batch tun INSERT, UPDATE oder DELETE, so viel Leistung zu verbessern. als solche:

Masseneinfügemodus:

SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(employees.toArray()); 
int[] updateCounts = namedParameterJdbcTemplate.batchUpdate("INSERT INTO EMPLOYEE VALUES (:id, :firstName, :lastName, :address)", batch); 
return updateCounts; 

BATCH UPDATE:

List<Object[]> batch = new ArrayList<Object[]>(); 
    for (Actor actor : actors) { 
     Object[] values = new Object[] { 
       actor.getFirstName(), 
       actor.getLastName(), 
       actor.getId()}; 
     batch.add(values); 
    } 
    int[] updateCounts = jdbcTemplate.batchUpdate(
      "update t_actor set first_name = ?, last_name = ? where id = ?", 
      batch); 
    return updateCounts; 

Intern wird batchUpdate()PreparedStatement.addBatch() verwenden, können Sie einige spring jdbc tutorial. sehen. Batch operations an die Datenbank in einem "Batch" gesendet, anstatt die Updates eins nach dem anderen zu senden. Das Senden eines Stapels von Aktualisierungen an die Datenbank auf einmal ist schneller, als sie nacheinander zu senden und darauf zu warten, dass alle fertig sind.Es gibt weniger Netzwerkverkehr beteiligt im Senden einer Charge von Updates (nur 1 Umlauf), und die Datenbank kann möglicherweise einige der Updates parallel ausführen. Darüber hinaus muss der DB-Treiberbatch operation unterstützen, wenn Sie batchUpdate() verwenden und batchUpdate() nicht in einer Transaktion in Standard ist.

Weitere Details, die Sie sehen können:

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-advanced-jdbc http://tutorials.jenkov.com/jdbc/batchupdate.html#batch-updates-and-transactions

Hoffnung, Ihnen zu helfen haben.

Verwandte Themen