devsss
827
2019-10-21 16:14:18 작성 2019-10-21 16:16:53 수정됨
8
323

자바에서 700만건의 데이터 처리 배치 개발 질문드려요~


안녕하세요~


월마다 600~700 만건 사이의 주소 db 데이터를받아 테이블에 갱신하는

작업을 배치로 개발하려고 합니다


신규 데이터는 TEMP 테이블에 밀어넣은뒤,

실제 사용되는 테이블에 기존데이터 삭제후 insert 작업을 하려고 하는데요


건수가 워낙많아서 어떤식으로 짜야할지 모르겠습니다

목표는 해당 테이블에 최대한 기존 데이터를 유지하며 갱신하는걸 목표로 하고있습니다

기존 사용자가 사용률이 적은시간에 작업하겠지만, 최대한 지장없이 갱신하는것을 목표로하고있습니다~!


주소 테이블상 컬럼은 30여개이고 pk는 1개뿐입니다


제가 생각하지못한방식도 좋으니 조언부탁드립니다 ^^ 

감사합니다~!

0
0
  • 답변 8

  • 제타건담
    6k
    2019-10-21 16:20:16

    궁금한점이 있는데요..주소 DB 데이터를 SQL문으로 받으시는건가요..? 아님 csv나 json 형태의 데이터로 구성된 파일로 받으시는건가요..?
    SQL문이면 TEMP 테이블에 넣는건 이해가 되는데..csv나 json 형태의 데이터로 된 파일이면 파일을 읽어가며 직접 주소데이터를 건드려도 좋지 않을까 해서요..?
    TEMP 테이블에 600-700만건 넣는 작업 자체도 결국 파일에서 하나하나 읽어가며 하는건데..굳이 저 작업이 들어가는 이유를 몰라서 여쭤봅니다..

    0
  • 컴포지트
    621
    2019-10-21 16:27:35

    1. DB 프로시저로 처리 (추천)

    가능하다면 DB 프로시저 사용을 추천합니다. 자바가 필요할 정도로 복잡한 로직이 필요하지 않다면.


    2. 일반적인 JDBC를 이용할 경우

    ResultSet 이용을 추천드립니다. 초창기 JDBC 연동 당시 배웠을 테니 자세한 내용은 생략하겠습니다.


    3. MyBatis 를 이용할 경우

    절대 List 를 이용하지 마시고, MyBatis 3.4.1 이상이라면 매퍼에서 리턴 타입을 List 대신 Cursor로 바꾸면 되고, 미만이라면 ResultHandler를 구현해서 사용하면 됩니다.

    1
  • devsss
    827
    2019-10-21 16:30:05

    제타건담님 관심갖고 답변달아주셔서 감사합니다~

    원천데이터는 csv 파일로 받아오고,  TEMP 테이블은 골든과 같은 툴을이용해 csv 파일을 밀어넣고있습니다

    위 글에서 빠트린점이

    TEMP 테이블은 테스트계이구요, 테스트계에서 먼저 데이터 밀어넣고 테스트한뒤에

    운영 서버의 본 테이블로 갱신하려고합니다


    위에 질문드린사항은 테스트계에서 TEMP테이블 검증이 끝난뒤

    운영계 DB로 갱신하는작업에 관한 내용입니다 !


    감사합니다 ~!!

    0
  • devsss
    827
    2019-10-21 16:32:44

    컴포지트님 답변감사드립니다

    굳이 자바단에서 짜야한다면, 700만건 데이터를 어느정도 개수씩 짤라서 삭제하고 insert 하는게 나을지 궁금합니다 !

    0
  • 컴포지트
    621
    2019-10-21 16:42:45 작성 2019-10-21 16:45:47 수정됨

    @devsss

    그건 직접 찾으시는 것을 추천드립니다. 버퍼 크기를 지정하듯이 하면 됩니다. (예: 예상 평균 건수 / 크기에 따라 나눌 시나리오 개수. 10이나 100 정도)

    JDBC와 MyBatis 는 대량 처리를 위한 Batch Processing 기능을 제공합니다.

    아래를 참고하여 시도해 해보시길.

    https://bkim.tistory.com/4

    0
  • satis
    2k
    2019-10-21 17:56:09

    적절한 건수를 찾는게 튜닝영역이여서 확답드리긴 어려울거에요.

    직접 처음부터 로직을 짜는거보다 ETL솔루션을 이용하시는 것이 안정성 면에서 낫습니다.


    0
  • devsss
    827
    2019-10-22 10:08:21

    컴포지트님 다시한번 답변감사드립니다 !

    보내주신 url 참고할게요 감사합니다 !!


    0
  • devsss
    827
    2019-10-22 10:08:56

    satis 님 답변주신거 감사드립니다 !

    ETL 솔루션부터 확인해보겠습니다 감사합니다 ~!!

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.