Ответ
Batch update (пакетное обновление) — это техника выполнения нескольких SQL-запросов (INSERT, UPDATE, DELETE) за один сетевой вызов к СУБД, вместо отправки каждого запроса по отдельности.
Основная цель — значительное повышение производительности за счет:
- Сокращения сетевых издержек: Объединение множества запросов в один пакет уменьшает количество циклов обмена данными между приложением и БД.
- Снижения накладных расходов СУБД: Сервер базы данных обрабатывает пакет как единую рабочую единицу, что часто эффективнее.
Как использовать в 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 запросов), чтобы не превысить лимиты буфера драйвера или СУБД.
- При ошибке в одном из запросов пакета поведение зависит от драйвера и СУБД (может откатить весь пакет или часть).