나는 내 과거의 반향을 듣고 내 실수를 되풀이하려는 경우를 대비해 다른 접근 방식을 제안하고 싶습니다. 귀하의 상황에 해당되거나 그렇지 않을 수도 있습니다.
데이터베이스에서 많은 양의 데이터를 가져와 데이터베이스로 다시 가져와야한다고 썼습니다.
작업해야하는 외부 데이터를 데이터베이스에 임시로 삽입하고 데이터베이스 내의 모든 처리를 수행 할 수 있습니까? 이것은 다음과 같은 장점을 제공합니다 :
- 그것은 그것은 (절차 능가하는 성능)
그것은 설정을 기반으로 가능
- 처리 많은 양의 데이터를 지속 할 필요가 없습니다
- 많은 양의 데이터를 추출 할 필요가 없습니다
- 데이터베이스가이를 지원하면 병렬 실행을 사용할 수 있습니다.
- 프로세스 중에 발생하는 모든 오류에 대한 보고서를 작성할 수있는 프레임 워크 (테이블 및 SQL)를 제공합니다.
예를 들어 설명해주십시오. 오래 전에 저는 구매, 지불 및 관련 고객 데이터를 파일에서 중앙 데이터베이스로로드하는 목적을 가진 (java) 프로그램을 구현했습니다.그 당시에는 (그리고 깊이 생각해 보았습니다.) 트랜잭션을 하나씩 처리하기 위해로드를 설계하고 각 데이터에 대해 여러 데이터베이스 조회 (SQL)를 수행하고 마지막으로 적절한 테이블에 여러 개의 삽입을 수행했습니다. 당연히 이것은 볼륨이 증가하면 확장되지 않았습니다.
그런 다음 나는 또 다른 실수를했습니다. 그게 문제였던 데이터베이스라고 생각했는데 (은 SELECT가 느리다는 의미로라고 들었습니다.) 그래서 나는 데이터베이스에서 모든 데이터를 꺼내 자바에서 모든 처리를하기로 결정했습니다. 마지막으로 모든 데이터를 데이터베이스에 다시 저장합니다. 로드 프로세스를 쉽게 확장 할 수 있도록 모든 종류의 레이어를 콜백 메커니즘으로 구현했지만 성능이 좋지 않았습니다.
리어 미러를 보면, 내가해야 할 일은 테이블에 일시적으로 10 만 줄을 삽입하고 거기에서 처리하는 것입니다. 제가 처분 할 수있는 모든 기술의 힘을 발휘한다면 거의 반나절 정도의 과정을 거쳐야 몇 분이 걸렸을 것입니다.