728x90
적용이유
크롤링된 keyword 들을 insert 할때 하나하나 진행되다보니 많은 시간 소요 -> 시간을 줄일 수 있는 방법은 없을까 ?
1. Bulk insert
2. JPA batch insert
적용 전 insert 횟수와 소요시간
- 문제점
- 현재 insert시 id값을 IDENTITY 로 생성하여 제약사항에 해당
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
-
- 해결법 1
- JDBC 의 batchUpdate() 이용
- Auditing 을 사용하고 있기때문에 제약 발생
- 해결법 2
- Sequence나 Table 방식 사용
- MySQL에는 Sequence Object가 없어 Table 방식 이용
- 최적화가 되어있지 않다
- JdbcTemplate (+ MyBatis)와 같이 문자열 기반의 SQL 프레임워크는 IDE 자동 지원이 제한적.
- Entity (Table) 컬럼 추가/수정이 있을때마다 연관된 쿼리 문자열을 모두 찾아서 반영 필요.
- 해결법 1
- 선택 → JDBC의 batchUpdate()
- 변경점 JPA Auditing 대신 PreparedStatement 의 setTimestamp 사용하여 생성시간 입력
결과
▶ 약 2000개 insert 기준 소요시간 99초 → 0.1초로 시간 절약
'Spring' 카테고리의 다른 글
DBMS의 트랜잭션과 @Transactional (1) | 2022.09.23 |
---|---|
JPA와 Spring Data JPA (0) | 2022.04.24 |
Sring Boot + Redis를 이용한 Cachcing (0) | 2022.04.10 |
[JPA] 더티 체킹 (Dirty Checking) (0) | 2022.04.08 |