Что такое batch update (пакетное обновление) в контексте баз данных и зачем оно нужно?

«Что такое batch update (пакетное обновление) в контексте баз данных и зачем оно нужно?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Batch update (пакетное обновление) — это техника выполнения нескольких SQL-запросов (INSERT, UPDATE, DELETE) за один сетевой вызов к СУБД, вместо отправки каждого запроса по отдельности.

Основная цель — значительное повышение производительности за счет:

  1. Сокращения сетевых издержек: Объединение множества запросов в один пакет уменьшает количество циклов обмена данными между приложением и БД.
  2. Снижения накладных расходов СУБД: Сервер базы данных обрабатывает пакет как единую рабочую единицу, что часто эффективнее.

Как использовать в JDBC:

Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement("INSERT INTO users (name, email) VALUES (?, ?)");

ps.setString(1, "Alice");
ps.setString(2, "alice@example.com");
ps.addBatch(); // Добавляем первый набор параметров в пакет

ps.setString(1, "Bob");
ps.setString(2, "bob@example.com");
ps.addBatch(); // Добавляем второй набор

int[] updateCounts = ps.executeBatch(); // Отправляем весь пакет
conn.commit();

Важные замечания:

  • Не все СУБД и драйверы одинаково хорошо поддерживают пакетную обработку.
  • Размер пакета следует подбирать эмпирически (часто оптимально 50-100 запросов), чтобы не превысить лимиты буфера драйвера или СУБД.
  • При ошибке в одном из запросов пакета поведение зависит от драйвера и СУБД (может откатить весь пакет или часть).