개상구
41
2017-12-07 19:38:29.0
5
138

대용량 DB select를 어찌해야할지 모르겠습니다 ㅠ


서로다른 서버단의 이기종 DB가 있는데요

서버1의 db에 약 5천만건의 데이터가 들어있습니다.

그래서 서버1의 데이터를 select로 불러와서 서버2에 있는 db에 insert를 해야하는데

문제는 서버1의 데이터가 너무 많아 불러오는데 시간이 너무 오래 걸립니다.

그래서 생각한 방법이 서버1에 있는 데이터를 대략 1만건씩 끊어서 select를 하려고하는데

for문으로 돌리려니 결국은 전체 카운트를 해야할것 같아서요.

혹시 이것보다 더 좋은 방법이 있으시면 저에게 가르침을 주십시오.

오늘도 즐거운 하루 되시기 바랍니다:)

0
0
  • 답변 5

  • 아수수
    629
    2017-12-07 22:07:56.0

    인덱스를 추가하세요

    0
  • 애리밍
    2k
    2017-12-07 23:06:10.0

    mysql이면 limit를 사용해서 list가 빌때까지 불러오는 배치작업을 돌리면 되고 오라클이라면 row_number를 사용하는 방법이 있겠네요. 디비가 같다면 링크를 거는것도 방법이겠네요.

    0
  • ansdbduf
    620
    2017-12-07 23:47:31.0 작성 2017-12-07 23:58:04.0 수정됨
    ResultSet sourceRs = ...
    PrepareStatement targetPstmt = ...

    sourceRs.setFetchSize(10000);
    while(sourceRs.next()) {
     targetPstmt.setInt(1, sourceRs.getInt("ID"));
     targetPstmt.addBatch();
    i++;
     if (i % 10000 == 0) targetPstmt.excuteBatch();
    }
    targetPstmt.excuteBatch();

    폰으로 대충 코딩해봤어요
    0
  • antop
    121
    2017-12-08 08:18:17.0

    한 번만 옮기면 끝나는 작업이라면...

    프로그램으로 작성하는 것 보다 ETL 툴이라던가 디비간 데이터 마이그레이션 해주는 툴 많으니 그쪽으로 한번 찾아보심이...

    0
  • 개상구
    41
    2017-12-13 10:51:34.0

    ㅠㅠ 다들감사합니다 제가 개발을한다고 느제 글을봤네요 조금만일찍봤더라면!!

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