Пакетная вставка Spring Data JPA - PullRequest
0 голосов
/ 02 октября 2019

У меня есть 1 000 000 записей для ввода в базу данных. У меня есть arrayList всех миллионов записей. Затем я запускаю цикл for, чтобы разбить arrayList на более мелкие списки по 1000 элементов и сохранить все. Первая группа из 1000 вставок занимает менее секунды, затем каждая партия из 1000 выполняется дольше и дольше, в пределах 100 000 записей требуется более минуты для сохранения. Если я остановлю программу и укажу, где она остановилась, первая партия снова вставит менее чем за секунду, тогда время на вставку возрастет. Ниже псевдокод

ArrayList<Student> students= getAllRecords();
int skip =1000;

for (int i = (int) (repository.count() + 1); i < students.size(); i += skip) 
{
    List<String> subStudents = students.subList(i, Math.min(i + skip, students.size()));
    studentRepository.saveAll(subStudents);
}
...