Bulk Insert
Bulk Insert with MySQL
Batch Insert ์ฑ๋ฅ ํฅ์๊ธฐ 1ํธ - With JPA - Yun Blog | ๊ธฐ์ ๋ธ๋ก๊ทธ
GenerationType.IDENTITY
๋ฅผ ์ฌ์ฉํ๋ฉด Batch Insert๊ฐ ์๋๋ค๊ณ ํ๋ค.
Spring Data์์ Batch Insert ์ต์ ํ
Hibernate๊ฐ ์ฑํํ Transactional Write Behind์ ์ถ๋์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋์ JDBC ์์ค์์ Batch Insert๋ฅผ ๋นํ์ฑํํ๋ค๊ณ ํ๋ค.
The only drawback is that we canโt know the newly assigned value prior to executing the INSERT statement. This restriction is hindering the โtransactional write behindโ flushing strategy adopted by Hibernate. For this reason, Hibernates disables the JDBC batch support for entities using the IDENTITY generator.
ํด๊ฒฐ์ฑ
MySQL์ ์ฌ์ฉํ๋ค๋ฉด
TABLE
์ด๋SEQUENCE
๋ฅผ ์จ์ผํ ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ํ์ง๋ง ๋ณ๋ค๋ฅธ ์กฐ์น ์์ด ์ฌ์ฉํ๋ฉด Batch Insert๋ฅผ ๋ชป์ฐ๋IDENTITY
๋ณด๋ค๋ ๋๋ฆฌ๋ค.dev-tips/JPA-GenerationType-๋ณ-INSERT-์ฑ๋ฅ-๋น๊ต.md at master ยท HomoEfficio/dev-tips
Spring Data JPA๋ฅผ ๋ฒ์ด๋ JDBC๋ฅผ ์ฌ์ฉํ๋ค.
JdbcTemplate
์batchUpdate()
๋ฑ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.์ค์ ๋ก ์ฑ๋ฅ์ ๊ฐ์ฅ ๋น ๋ฅด๋ค๊ณ ํ๋ค. (ํ ์คํธ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ค.)
๊ฒฐ๋ก
์์ฃผ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํ๊บผ๋ฒ์ ์ ๋ ฅํ ๋๋ Spring Data JPA๋ฅผ ์ ์ ๋ค๋กํ๊ณ Spring Data JDBC์
batchUpdate()
๋ฅผ ํ์ฉํ๋ ๊ฒ๋ ์ข๋ค.Spring Data JDBC๋ Spring Data JPA์ ํจ๊ป ํผ์ฉํด์ ์ฌ์ฉํ ์๋ ์๊ณ ,
@Transactional
์ ํตํด ํธ๋์ญ์ ์ด ๊ด๋ฆฌ๋ ์ ์์ผ๋ฏ๋ก, ํ์ค์ ์ผ๋ก ๊ฐ์ฅ ๋์ ๋ฐฉ๋ฒ์ด๋ค.
Spring Data JPA๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ค๋ฉด IDENTITY ๋ฐฉ์ ๋ง๊ณ Batch SEQUENCE ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ์์ ์ ๋ํ ์ด์ ์ง์ ์ด ํ์ ์ด์์ผ๋ก ๋ณต์กํ๊ณ ,
ํ ์ด๋ธ ์์ฑ ์๋ถํฐ ์ ์ฉํ๋ฉด ๊ด์ฐฎ์ง๋ง, ์ด๋ฏธ ID ์์ฑ ๋ฐฉ์์ด IDENTITY์ธ ๊ธฐ์กด ํ ์ด๋ธ์ SEQUENCE ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ๋ถ๋ด์ด ์๊ณ ,
batch ํฌ๊ธฐ ์ง์ ๊ด๋ จ ์ด์ ์์ ๋จ์ ์ด ์๋ค.
Last updated