Чем полезно пакетное обновление JDBC?

Все говорят, что пакетные обновления уменьшают количество вызовов JDBC. Может кто-нибудь объяснить, что означает "вызов JDBC" и как увеличенное количество таких вызовов обходится дороже по сравнению с переносом всей нагрузки за один вызов JDBC.

3 ответа

В разговорной речи, когда разработчик использует фразу JDBC call, они говорят об отправке информации по проводам в базу данных. Пакетная функция JDBC API позволяет отправлять несколько отдельных операций в одном сетевом вызове, в отличие от вызова для каждого оператора SQL. Из спецификации JDBC:

Средство пакетного обновления позволяет объекту Statement отправлять набор разнородных операторов SQL вместе в виде единого блока или пакета в базовый источник данных.

В случае PreparedStatement существует дополнительное преимущество, заключающееся в необходимости создания только одного оператора. Это позволяет выполнять один и тот же запрос с несколькими наборами параметров связывания, не добавляя сам оператор в пакет несколько раз. Конечным результатом является меньший сетевой трафик и связанные с ним издержки.

Пример из спецификации:

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();

Как описано в документации IBM:

Драйверы JDBC, которые поддерживают JDBC 2.0 и выше, поддерживают пакетные обновления. С помощью пакетных обновлений вместо обновления строк таблицы DB2(R) по одной вы можете указать JDBC одновременно выполнять группу обновлений. Операторы, которые могут быть включены в один и тот же пакет обновлений, называются пакетными операторами.

Если оператор имеет входные параметры или выражения хоста, вы можете включить этот оператор только в пакет, в котором есть другие экземпляры того же оператора. Этот тип партии известен как однородная партия. Если оператор не имеет входных параметров, вы можете включить этот оператор в пакет, только если другие операторы в пакете не имеют входных параметров или выражений хоста. Этот тип партии известен как гетерогенная партия. Два оператора, которые могут быть включены в один пакет, называются пакетно-совместимыми.

При вызове обновления JDBC программа java подключается к серверу базы данных и выполняет запрос. Это означает, что для каждого обновления java-программа связывается с сервером базы данных и выполняет запрос. Теперь, если мы используем пакетное обновление JDBC, приложению java необходимо связаться с сервером базы данных только один раз, выполнить все запросы на сервере базы данных и вернуться к приложению java.

Вкратце, это уменьшит двустороннюю связь между Java-приложением и сервером базы данных. Обычно оба будут на разных серверах, поэтому это уменьшит много сетевых ресурсов. Следовательно, он достигает лучшей производительности.

Другие вопросы по тегам