์ํฉ
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์, ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ฃ์ด์ผํ๋ ์ํฉ์ด ์๊ฒผ๋ค.
History์ ์๋ ์ ์ ์ ๋ณด๋ฅผ ํ๋์ ๋ณด์ ํด๋น id๋ฅผ ๊ฐ์ง ์ ์ ์๊ฒ ํ๊บผ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์ ์ด์๋ค.
์ฒ์์ ์์ฑํ ์ฟผ๋ฆฌ๋ forEach๋ฌธ์ผ๋ก ๊ฐ๊ฐ save๋ฅผ ๋๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด์๋ค.
ํด๋น ์์ ์ ์ฝ๋๋ฆฌ๋ทฐ๋ก save์ saveAll ์ ๋ํ ๊ฒ์ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋ค.
์ด๋ฒ๊ธฐํ์ ํด๋น ์ฟผ๋ฆฌ๋ค์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์์๋ณด๋ ค๊ณ ํ๋ค.
์ฒ์์ ์์ฑํ save() ๋ฉ์๋์ด๋ค.
memberHistories.forEach(memberHistory -> memberActivityRepository.save(
memberActivityRepository.save(
MemberActivity.builder()
.memberId(member.getId())
.part(memberHistory.getPart())
.generation(memberHistory.getGeneration())
.build()
)
));
row 100๊ฐ๋ฅผ Insert 297ms๊ฐ ๊ฑธ๋ ธ๋ค.
๋๋ฒ์งธ๋ก ์์ฑํ saveAll() ๋ฉ์๋์ด๋ค.
val memberActivities = new ArrayList<MemberActivity>();
memberHistories.forEach(memberHistory -> memberActivities.add(
MemberActivity.builder()
.memberId(member.getId())
.part(memberHistory.getPart())
.generation(memberHistory.getGeneration())
.build()
)
);
memberActivityRepository.saveAll(memberActivities);
row 100๊ฐ๋ฅผ Insert 114ms๊ฐ ๊ฑธ๋ ธ๋ค. Batch insert๊ฐ ์ ๋์๋ค!
Batch insert ์ฌ๋ถ์ ์๋์ฐจ์ด๊ฐ ํ์ฐํ ์ฐจ์ด๊ฐ ๋ณด์ธ๋ค.
save() ๋ฉ์๋
ํธ์ถ๋ ๋๋ง๋ค, new transaction์ด ์์ฑ๋๋ค.
saveAll() ๋ฉ์๋
์ค์ง ํ๋์ transaction์ด ์์ฑ๋๋ฉฐ, ๋์ค์ save()๋ ๋ ์ฌ์ฌ์ฉ๋๋ค.
์๋ insert ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ด ์ถ๋ ฅ๋์ด์, ์ฟผ๋ฆฌ ๊ฐ์๋ ๋๊ฐ์ด ๋๊ฐ๋์ค ์์์, ๋ฌด์จ ์ฐจ์ด์ง?๋ผ๊ณ ์๊ฐ์ ํ์ ๊ฒ์ด๋ค!
Hibernate๊ฐ ์ ๊ณตํ๋ ๋ฒํฌ insert๋ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ multi value ํ๋๋ก ๋ง๋ค์ด์ ๋ณด๋ด๋ ๋ฐฉ์์ด ์๋, ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ์์ ํ๋ฒ์ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค. (๊ทธ๋์ ์์ ๋๊ฐ์ ์ฟผ๋ฆฌ ๋ชจ๋ ๋๊ฐ์ ๊ฐ์์ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ด ๋ก๊ทธ์ ์ฐํ์ง๋ง, ๋ฒํฌ๋ก ์ ๋ ฅ๋๋๋ ์๋๋์ ์ฐจ์ด )
์ด ์ถ๋ ฅ๋ ๊ฐ๋ณ insert๋ฌธ์ ๋๋ผ์ด๋ฒ๊ฐ DB์ ๋ณด๋ธ SQL์ด ์๋๋ผ SQL Hibernate๊ฐ ๋๋ผ์ด๋ฒ์ ๋ณด๋ธ ๋ด์ฉ๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด์๋ค.
๊ฒฐ๋ก : save(), saveAll()์ ํ์ฐํ ์๋์ฐจ์ด๊ฐ ๋๋ค.
'Server๐งค > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ๋์์ฑ ์ฒ๋ฆฌ - ๋น๊ด์ ๋ฝ VS ๋๊ด์ ๋ฝ (1) | 2023.10.10 |
---|---|
[JPA] Java Persistence API (0) | 2023.06.12 |
[JPA] ํ๋ก์ (0) | 2023.02.24 |
[JPA] ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ (0) | 2023.02.03 |
[JPA] ์ฐ๊ด๊ด๊ณ ๋งคํ (๋จ๋ฐฉํฅ ๋งคํ) (0) | 2023.02.03 |