This repository was archived by the owner on Mar 15, 2025. It is now read-only.
Pick 10000개 insert할 때 걸리는 시간 비교 #408
sangwonsheep
started this conversation in
메모장
Replies: 3 comments 3 replies
-
[참고 자료] |
Beta Was this translation helpful? Give feedback.
0 replies
-
@sangwonsheep 고생하셨습니다. |
Beta Was this translation helpful? Give feedback.
3 replies
-
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
DB에 대량의 데이터 넣는 방법
프론트 측에서 나중에 대량의 데이터를 가지고, 렌더링 최적화를 하고 싶다고 하여 대량의 데이터를 DB에 넣는 방법을 찾아보게 되었습니다.
떠오른 아이디어는 총 2가지가 있었습니다.
이 2가지 방법 모두 블로그 글들을 찾아본 결과
상당한 시간이 소요
된다는 글이 많이 보였습니다.블로그 글에서 위 2가지 방식 외에 다른 좋은 방법을 알려주어 시도해보게 되었습니다.
블로그 글에서 제시해준 아이디어는
bulk insert
입니다.bulk insert에 대한 정의는 아래에서 자세히 살펴보도록 하겠습니다.
insert vs bulk insert
insert :
insert into pick values()
를10000번 실행
시키는 것입니다.bulk insert :
insert into pick values()
->VALUES
에 여러 행을 넣어서1번만 실행
시키는 방식입니다.insert문을 여러 번 실행시키는 것이 아닌
VALUES
에 여러 행을 넣어서 1번만 실행시키는 방식입니다.즉, bulk insert의 경우
VALUES에 10000개의 행
이 들어가게 됩니다.둘의 차이를 알고 난 이후
JPA로 bulk insert
를 구현할 수 있는지에 대해 궁금하여 JPA를 하나씩 파헤쳐 보았습니다.JPA save
현재 로직은 하나씩 save 하기 때문에 당연히 bulk insert가 되지 않는다고 생각하게 되었습니다.
그렇다면, JPA에서 제공해주는
saveAll()
메서드를 쓰면 bulk insert가 되지 않을까? 라는 생각이 들었습니다.JPA에서 구현체가 어떤 방식으로 처리하는지 궁금하여 구현체를 파헤쳐 보았습니다.
SimpleJpaRepository.class
saveAll
메서드를 살펴보면, 반복문을 돌면서 하나씩 save하는 것을 확인하실 수 있습니다.그렇기 때문에 saveAll을 사용해도 bulk insert가 아닌 하나씩 insert하는 것을 알게 되었습니다.
JPA로는 bulk insert가 불가능하기 때문에 bulk insert를 구현하는 방법에 대하여 찾아본 결과
JdbcTemplate
을 이용하면 됩니다.JdbcTemplate bulk insert
JdbcTemplate의 구현체로
BatchPreparedStatementSetter
를 이용하면 bulk insert 연산이 가능하게 됩니다.최상단에 문자열로 작성된 sql문을 보시면, insert into 하나만 사용하는 것을 확인하실 수 있습니다.
setValues
메서드는getBatchSize
만큼 반복하면서VALUES (?, ?, ?, ?, ?, ?, ?, ?)
에 행들을 추가하게 됩니다.bulkInsertPick
의 파라미터로 받은pickList
의 크기만큼 반복하면서 pick 관련 정보들을 values에 추가하게 됩니다.이렇게 bulk insert에 대한 구현이 끝나게 되었습니다.
대량의 데이터를 insert 해보지 않아 구현 방법이 떠오르지 않았고, 어렵다고 생각했지만 생각보다 쉽게 구현할 수 있었습니다.
마지막으로 두 방식 모두 얼마나 시간 소요가 들지에 대하여 궁금하여 측정을 해보았습니다.
시간 비교
1. 10000번 insert
2. bulk insert
결과
Beta Was this translation helpful? Give feedback.
All reactions