개발자
안녕하세요. 초보 자바 개발자 입니다 회사에서 대용량 수신파일에 대한 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하는게 맞지 않을까하는데 조언 부탁드리겠습니다.
답변 1
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 02월 27일
안녕하세요. 여러 가지 접근 방법이 있을 수 있지만, 대용량 데이터를 처리하기 위해서는 성능 최적화가 중요하므로 추천하는 방식은 다음과 같습니다. 1. **Temp Table 사용**: 파일의 정보를 일시적인 테이블에 insert 한 후 원본 테이블과 join을 사용해 데이터를 update/insert 하는 것이 좋습니다. 이 방법은 SQL 쿼리로 빠르게 처리될 수 있으며 대용량 데이터 처리에 적합합니다. 2. **Batch Processing**: JDBC의 Batch 기능을 이용하여 많은 양의 데이터를 일괄 처리할 수 있습니다. 이렇게 하면 네트워크를 통한 요청 회수 줄임으로써 성능을 개선할 수 있습니다. 3. **스트리밍 처리**: 파일을 한 번에 읽는 것이 아니라 스트림으로 처리하면 메모리 사용량을 크게 줄일 수 있습니다. Java에서는 `BufferedReader`, `Scanner` 등의 클래스가 파일 스트리밍에 사용될 수 있습니다. 4. **Multi-Threading**: 여러 군데에서 동시에 데이터를 읽고 쓸 경우, 멀티스레딩을 고려해 볼만합니다. 작업 부하를 분산시키고 시스템의 효율성을 높이기 위해 Multi-Threading를 사용할 수 있지만, 디버깅과 유지 관리가 복잡해질 수 있으므로 주의하셔야 합니다. 예상되는 데이터 양에 대비하여 올바른 자료 구조를 선택하고 적절한 인덱스를 설정하는 것도 중요합니다. 이러한 방식들은 정확한 결과를 얻기 위해 세심한 테스트와 튜닝이 필요합니다. 기존 코드의 유지보수와 확장성을 고려해서 가장 효율적인 방법을 선택하시면 됩니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!