Spring Batch(16)
-
TASKLET 예제
TASKLET 구현 예제대용량의 데이터 처리시 Reader->Processor->Writer 구현 방법 보다는 쿼리에서 INSERT SELECT 쿼리로 구현하는게 더 효과 적인 경우가 있다. 예를 들어 몇천만건 억단위건 데이터 처리시에는 INSERT SELECT로 구현하는 편이 낫다. 이번 프로젝트 진행할때 최대 몇 십억 단위의 데이터를 INSERT SELECT 방식으로 집계 처리하는데에도 약 2~3시간이 걸렸었다. Reader->Processor->Writer의 경우 데이터를 조회 하여서 조회 결과를 객체로 변환하여서 만약 로직이 있다면 로직처리 후 저장의 단계를 거치면서 시간이 많이 걸리게 될 것이다. 천만건 이상의 데이터 처리시에는 INSERT SELECT 쿼리로 구현이 가능하다면 이 방법을 사용 ..
2019.01.15 -
ORA_HASH를 이용한 Partitioning 구현
ORA_HASH를 이용한 Partitioning 구현오라클의 ORA_HASH를 이용하여서 구현하는 방법은 사용자가 설정한 gridSzie 만큼 분할하여서 HASH VALUES를생성한다. 그리고 분할된 영역별로 병렬로 수행하는 방식이다. - 사용자가 지정한 gridSize 만큼 Partition을 생성한다.- 분할된 HASH 영역별로 Reader, Writer 작업을 수행한다.- 위 그림에서 보면 조회된 테이블 결과에서 HASH_RANGE값은 0~gridSize 만큼 생긴다. PartitionJob.xml 작성 PartitionerHelpler.java 작성package com.batchguide.partitioner; import java.util.HashMap; import java.util.Map; ..
2018.12.26 -
Range Partitioning 예제 - 구현
Range Partitioning 구현 앞에서 설정한 설정 정보를 이용하여 실제로 예제를 구현해보도록 하자. 입력 데이터는 MySQL 테이블에 등록 해두었고 이 데이터를 Oracle 테이블에 등록 해보도록 하자. 구현에 앞서 프로그램 전체적인 구조는 아래 그림을 참고 하도록 하자. - 전체적인 구조는 사용자가 지정한 grid-size 만큼 작업을 분할한다. 예제에서는 5로 설정 하였다. 따라서 위의 그림을 보면 5개의 Slave가 생성된다. - 앞에서 작성한 ColumnRangePartitioner 클래스를 이용하여서 minValue와 maxValue를 구한다. - 그리고 Slave 별로 Reader, Writer 작업을 수행한다. RangePartitionJob.xml 작성 - 분할할 작업수를 grid..
2018.12.18 -
Range Partitioning 예제 - 설정
Range Partitioning 설정 테이블이 특정 컬럼을 지정하여 분할하고자 하는 수 만큼의 작업을 분할하여 대용량 데이터를 처리를 위한 예제이다. 사전준비 예제를 작성하기 앞서 샘플 데이터 입수, 테이블 생성, 샘플 데이터 등록, Partitioning 처리를 위한 자바 클래스를 작성한다. 샘플데이터준비 Kaggle 사이트에서 Black Friday 자료를 다운 받는다. 다운로드사이트: https://www.kaggle.com/sdolezel/black-friday 데이터베이스 테이블 생성 MySQL 테이블 생성 스크립트 CREATE TABLE `black_friday` ( `user_id` varchar(10) NOT NULL, `product_id` varchar(10) NOT NULL, `ge..
2018.12.17 -
CompositeItemWriter 예제 - 구현
CompositeItemWriter 구현20건의 CSV 파일에서 데이터를 읽어서 MySQL, Oracle 데이터베이스에 적재하도록 구현. 테스트는 정상인 경우 오류인 경우 트랜잭션에 대한 동작 여부 확인 CompositItemWriterJob.xml 작성▩ Job ID 설정 ▩ Reader 설정 - compositeReader ▩ Writer 설정 - compositeWriter ▩ Writer Reference Bean 설정 - mysqlDbWriter ▩ Writer Reference Bean 설정 - oracleDbWriter ▩ OracleQuerySQL.xml - insertFifaRanking1 등록 쿼리 설정 INSERT /* id:insertFifaRanking1| Fifa 순위 저장 | ..
2018.12.02 -
CompositeItemWriter 예제 - 설정
CompositeItemWriter 설정리소스파일은 하나이고 두종류의 데이터베이스에 정보를 저장한다고 가정 해 본다면 하나의 READER와 두개의 WRITER를 구성하면 될 것이다.이와 같은 구성을 위해 CompositeItemWriter 사용에 대한 예제이다.이 예제의 가장 큰 목적은 2 Phase Commit을 구현하는데 있다. 하나의 데이터베이스 저장 시 오류가 난다면 전체 Transaction에 대한 Rollback처리 구현에 목적이 있다. 사전준비이제 두개의 데이터베이스를 사용해야 하므로 기존에 설정되었던 MySQL 이외에 Oracle DB에 대한 설정이 추가 되어져야 하므로 이와 관련된설정 파일 수정이 먼저 필요하다. 그리고 멀티 트랜잭션 관리를 위해 스프링의 ChainedTransaction..
2018.12.02