개발자

자바 대용량 txt파일 update, insert 처리

2024년 02월 27일조회 244

안녕하세요. 초보 자바 개발자 입니다 회사에서 대용량 수신파일에 대한 update, insert 처리 건을 업무로 받아서 개발 중에 있는데 대용량 파일에 대한 처리 업무는 처음이라 어떤 방식이 제일 베스트인가에 대한 결정이 어려워 질문 드립니다. 원본테이블에 존재하는 정보(소속, 이름, 주민, 회차(1~4 중 하나))를 수신받은 파일(주민, 회차(1~4중 하나), 회차에 대한 정보)을 읽어 원본테이블에 존재하는 정보의 회차와 수신 받은 파일의 회차가 같으면 update, 다른경우 insert해 한 명 당 4건의 정보(원본update 1건, insert 3건)를 가지게 해야합니다. 처음엔 PL로부터 약 10만명에 대한 정보만 입력되면 된다고 들어서 자바로 원본테이블 정보를 select 후 수신파일을 읽어 list<map>에 담고 for문을 통해+ 비교 후 원본에 존재하면 updateList에 존재하지 않으면 insertList에 담아 1000건씩 bulk insert, update 처리했습니다. 그런데 최대 40만명까지 늘어날 수 있다고 말이 바껴서... 그럼 수신 파일정보가 160만건인데 제 생각에는 temp table을 만들어서 수신파일정보를 전부 insert 후 원본테이블과 join하여 update, insert하는게 맞지 않을까하는데 조언 부탁드리겠습니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

김예지님의 프로필 사진

제 생각에는 아래 방법이 있을 것 같습니다. 1. 파일에서 데이터 로드할때 한번에 전체 로딩이 아닌, 버퍼로 읽고 사용후 버리는 방식 (=스트리밍 방식) - 자바 out of memory를 방지하기 위함입니다. - ex. 3000줄 단위로 읽고 처리후 버림. 2. upsert 쿼리 사용 - upsert쿼리란 insert를 수행하다가 pk 충돌나면 update를 수행하는 쿼리문입니다. - 데이터베이스 엔진마다 문법이 다릅니다.

profile picture

익명

작성자

2024년 03월 08일

답변 감사합니다. 도움이 되었습니다 :)

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!