save
기능을 SimpleJpaRepository
의 single record vs calling save on a list of records
에 사용하면 시간이 크게 감소합니다.스프링 데이터 JPA의 save()가 단일 레코드에서 호출 될 때 속도가 느린 이유와 레코드 목록에서 호출 할 때 속도가 느린 이유는 무엇입니까?
아래의 루프는 list
보다 길며 입니다.
for (Record r : csvRecords) {
myRepository.save(r);
}
myRepository
는 전혀 @Transactional
주석이 없습니다. 그러나 아래의 루프는 위와 비교하여 놀랍도록 빠릅니다.
List<Record> myArray = new ArrayList();
for (Record r : csvRecords) {
myArray.add(r);
}
myRepository.save(myArray);
우리는 SimpleJpaRepository
@Transactional
public <S extends T> List<S> save(Iterable<S> entities) {
List<S> result = new ArrayList<S>();
if (entities == null) {
return result;
}
for (S entity : entities) {
result.add(save(entity));
}
return result;
}
에서 save
구현에 불과 마스크 내가 먼저 버퍼 또는 I 내 데이터를 저장하는 경우는 어떤 차이가해서는 안 단일 save
동작이 구현을 보면 내 기록의 각각에 대한 호출을 저장하십시오. 따라서 속도 증가는 저에게 의미가 없습니다.
편집 : docs.spring.io/autorepo/docs/spring-data-commons/1.5.1.RELEASE/ 버전을 사용합니다.
'SimpleJpaRepository'의 서브 클래스를 사용하지 않고,'save (Iterable)'메소드를 오버라이드 한 것이 더 최적화되어 있습니까? –
'save()'에 대한 10 번의 단일 호출의 경우 10 개의 트랜잭션을 수행하고 있지만'save()'를 호출하면 10 개의 레코드 목록 만 포함됩니다. 그것은 아마도 당신의 관찰을위한 이유 일 것입니다. – blafasel
JPA API에는 이러한 "저장"메소드가 없습니다. 아마 당신은 JPA API가 아닌 "Spring Data JPA"를 의미 할 것입니다. – DN1