자바 bulk(대용량 데이터) insert 삽입

Kyu·2021년 1월 30일
0

테이블 정보 불러오기

mysql> desc user_log;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| nickname   | varchar(64)   | YES  |     | NULL    |       |
| money      | decimal(10,2) | YES  |     | NULL    |       |
| last_visit | datetime      | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

테스트 입력값 만들어보기

Dimport java.util.Random;

public class Test {

    private static Random r = new Random();

    public static void main(String[] args) {
        Test test = new Test();
        test.genData(100, 16);

    }

    private void genData(int count, int clen) {
        for (int i = 0; i < count; i++) {
            System.out.printf("%d,%s\n", i, genStr(clen));

        }
    }

    private Object genStr(int clen) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < clen; i++) {
            sb.append((char) ('a' + r.nextInt(24)));
        }
        return sb.toString();

    }
}

과정

  1. 위 예제처럼 자동으로 데이터를 만들 수 있는 코드를 짠다.
  2. 코드를 터미널에서 컴파일.
  3. 터미널에서 실행 - 생성하고 싶은 갯수만큼의 데이터를 만들어서 csv파일로 저장.
    예시: $ java Main 1000000 > bigdata.csv
    뜻: 100만을 메인에 입력하면 100만개만큼 더미데이터를 만들어서 bigdata.csv에 저장한다.
  4. 데이터를 테이블에 입력한다.
mysql> LODA DATA LOCAL INFILE 'big.csv' (로컬 데이터 big.scv를 로드)
	-> INTO TABLE table_name (테스트 테이블에 넣는다)
    -> FIELDS TERMINATED BY ',' (필드가 ','로 끝난다)
    -> ; (끝)
  
Qurey OK, 1000000 rows affected (1.12 sec)
Records: 1000000 Deleted: 0 Skipped: 0 Warnings: 0

잘들어갔는지 확인

select * from table_name

참고: 보통 외주해서 대용랑 파일을 받아오는데 첫번째 데이터에 테이블 정보가 들어가있어서 망하는 경우가 있다. 그거 무시하려면 끝에 IGNORE 1 LINES 라고 입력해주면 됨

참고

honux MySQL bulk insert

profile
TIL 남기는 공간입니다

2개의 댓글

comment-user-thumbnail
2022년 6월 29일

안녕하세요 22년도 백엔드 코스 짱민이라고 합니닼ㅋㅋㅋㅋ
대용량 데이터 삽입을 찾다가 좋은 글을 발견했는데 마침 선배님 글이라서 반가운 마음에 댓글 남깁니다.....ㅎㅎㅎㅎㅎㅎㅎㅎ

1개의 답글