Back to questions
Junior
13
Как ускорить вставку 100 миллиардов записей в БД? Сейчас: цикл с generate + insert + commit на каждую строку.
Companies where asked
ИП Ганус Александр Андреевич
Answer from AI
sobes.tech AI
Чтобы ускорить вставку 100 миллиардов записей в базу данных, нужно отказаться от вставки по одной записи с коммитом на каждую строку. Это очень медленно из-за накладных расходов на транзакции и сетевые операции.
Основные подходы:
- Использовать пакетные вставки (batch insert), группируя записи по несколько тысяч или десятков тысяч за один запрос.
- Отключить индексы и триггеры на время загрузки, чтобы не тратить ресурсы на обновление индексов.
- Использовать bulk load инструменты, если СУБД их поддерживает (например, COPY в PostgreSQL, LOAD DATA INFILE в MySQL).
- Отключить автокоммит и делать коммит после вставки больших батчей.
- Параллелить загрузку, если позволяет архитектура и СУБД.
Пример на псевдокоде:
connection.setAutoCommit(false);
PreparedStatement ps = connection.prepareStatement("INSERT INTO table (col1, col2) VALUES (?, ?)");
int batchSize = 10000;
int count = 0;
for (Record r : records) {
ps.setString(1, r.getCol1());
ps.setString(2, r.getCol2());
ps.addBatch();
if (++count % batchSize == 0) {
ps.executeBatch();
connection.commit();
}
}
ps.executeBatch();
connection.commit();
Такой подход значительно ускорит загрузку данных.