Cum este JDBC Batch Update util? [închis] (Programare, Java, Jdbc)

Cooper a intrebat.
a intrebat.

Toată lumea spune că actualizările batch reduc numărul de apeluri JDBC. Ar putea cineva să explice ce înseamnă „apel JDBC” și cum un număr crescut de astfel de apeluri este mai costisitor în comparație cu transportarea întregii sarcini într-un singur apel JDBC.

Comentarii

  • Uitați-vă la oricare dintre blogurile, răspunsurile SO, etc. unde „Toată lumea spune” acest lucru și aproape întotdeauna explică de ce. Dacă nu înțelegeți explicația, puneți o întrebare de urmărire acolo. Sau citiți documentația JDBC. –  > Por abarnert.
  • Cum a fost evaluat faptul că trimiterea mai multor lucruri prin mai multe apeluri JDBC este mai costisitoare decât trimiterea tuturor prin intermediul unui singur apel jdbc. într-un caz, transportăm sarcina printr-un singur apel JDBC, iar în alt caz distribuim aceeași sarcină prin mai multe apeluri jdbc. –  > Por cooper.
3 răspunsuri
jonathan.cone

În mod colocvial, atunci când dezvoltatorii folosesc expresia JDBC call se referă la trimiterea de informații prin cablu către baza de date. Caracteristica de lot a API-ului JDBC vă permite să trimiteți mai multe operații discrete într-un singur apel de rețea, spre deosebire de un apel pentru fiecare instrucțiune SQL. Din aplicația specificațiile JDBC:

Facilitatea de actualizare pe loturi permite unui obiect Statement să trimită un set de instrucțiuni SQL eterogene împreună ca o singură unitate, sau lot, către sursa de date de bază.

În cazul unui PreparedStatement, există avantajul suplimentar de a trebui să se creeze o singură declarație. Acest lucru vă permite să executați aceeași interogare cu mai multe seturi de parametri bind fără a adăuga de mai multe ori instrucțiunea în sine la lot. Rezultatul final este un trafic de rețea mai mic și o reducere a cheltuielilor generale asociate.

Un exemplu din specificații:

PreparedStatement stmt = con.prepareStatement(
"INSERT INTO employees VALUES (?, ?)");

stmt.setInt(1, 2000);
stmt.setString(2, "Kelly Kaufmann");
stmt.addBatch();

stmt.setInt(1, 3000);
stmt.setString(2, "Bill Barnes");
stmt.addBatch();

// submit the batch for execution
int[] updateCounts = stmt.executeBatch();

Comentarii

  • Într-o instanță, transportăm sarcina printr-un singur apel JDBC, iar în cealaltă instanță distribuim aceeași sarcină prin mai multe apeluri jdbc.Cum să evaluăm care dintre ele este mai costisitoare? –  > Por cooper.
  • @jonathan.cone: lotul se execută într-o singură tranzacție? Ce se întâmplă dacă una dintre interogări nu reușește să se execute? Se va inversa sau nu? –  > Por Gaurav.
knowbody

Așa cum este descris în documentația IBM:

Driverele JDBC care acceptă JDBC 2.0 și versiunile superioare acceptă actualizări pe loturi. Cu actualizările pe loturi, în loc să actualizați rândurile unei tabele DB2(R) unul câte unul, puteți direcționa JDBC pentru a executa un grup de actualizări în același timp. Instrucțiunile care pot fi incluse în același lot de actualizări sunt cunoscute sub numele de instrucțiuni care se pot executa pe loturi.

Dacă o instrucțiune are parametri de intrare sau expresii gazdă, puteți include acea instrucțiune numai într-un lot care are și alte instanțe ale aceleiași instrucțiuni. Acest tip de lot este cunoscut sub numele de lot omogen. În cazul în care o instrucțiune nu are parametri de intrare, puteți include această instrucțiune într-un lot numai dacă celelalte instrucțiuni din lot nu au parametri de intrare sau expresii gazdă. Acest tip de lot este cunoscut sub numele de lot eterogen. Două instrucțiuni care pot fi incluse în același lot sunt cunoscute ca fiind compatibile cu lotul.

Fahad

La apelarea actualizării JDBC, programul Java se conectează la serverul bazei de date și execută interogarea. Aceasta înseamnă că, pentru fiecare actualizare, programul Java contactează serverul bazei de date și execută interogarea. Acum, dacă folosim JDBC batch-update, aplicația java trebuie să contacteze serverul bazei de date o singură dată și execută toate interogările la serverul bazei de date și se întoarce la aplicația java.

Pe scurt, se va reduce numărul de călătorii dus-întors între aplicația java și serverul de baze de date. În mod normal, ambele se vor afla pe un server diferit, astfel încât se vor reduce multe resurse de rețea. Prin urmare, se obține o performanță mai bună.

Comentarii

  • Acest lucru este valabil numai dacă baza de date suportă efectiv execuția pe loturi, în caz contrar, driverul va „emula” execuția pe loturi prin efectuarea acelorași apeluri pe care le-ar face dacă declarațiile ar fi executate una câte una. –  > Por Mark Rotteveel.

Tags:,