Я пытаюсь улучшить производительность своего приложения, в котором одной из операций является чтение данных из файла CSV и сохранение значений из каждой строки как одного POJO (так 1500 строк CSV = 1500 POJO) в базе данных PostgresSQL , Это приложение с загрузочной пружиной, использующее JpaRepository с (конфигурациями по умолчанию) в качестве средства сохранения. Моей первоначальной попыткой было в основном это утверждение в каждой итерации цикла, когда он читал каждую строку в файле CSV:
autowiredRepoInstance.save(objectInstance);
Однако с настройкой spring.jpa.show-sql=true
в файле application.properties
я увидел, что для каждого POJO выполняется одна вставка. Моя попытка улучшить производительность состояла в том, чтобы объявить ArrayList вне цикла, сохранить каждый экземпляр POJO в этом списке в цикле и при каждом 500-м элементе выполнить сохранение, как показано ниже (на данный момент игнорируются случаи, когда есть больше / меньше, чем кратно 500):
loop(
objList.add(objectInstance);
if (objList.size() == 500) {
autowiredRepoInstance.save(objList);
objList.clear();
}
)
Однако это также генерировало отдельные операторы вставки. Какие настройки я могу изменить, чтобы улучшить производительность? В частности, я хотел бы свести к минимуму количество SQL-операторов / операций, и чтобы в Hibernate использовались «многострочные» вставки, которые позволяет postgresql:
https://www.postgresql.org/docs/9.6/static/sql-insert.html
Но любые другие предложения также приветствуются.
Спасибо.