2017-05-01 1 views
0

나는 ORM로 최대 절전 모드를 사용 봄 부팅에서 개발 된 모니터링 도구에서 일하고 있습니다. 예 여부 :빠른 방법 (자바 8 감소?)

나는 (독특한)는 MailId이 (OPENED, BOUNCED, DELIVERED ... 상태) 피드백을받은 경우 내 테이블에 (이미 전송 된 메시지의 행을 지속) 각 행을 비교하여 볼 필요가있다.

네트워크 폴더에서 CSV 파일을 읽음으로써 피드백을받습니다. CSV 파싱 및 파일 읽기는 매우 빠르지 만 데이터베이스 업데이트는 매우 느립니다. 내 알고리즘은 매우 효율적이지 않습니다. 왜냐하면 수천 개의 객체를 가질 수 있고 내 테이블을 볼 수있는 목록을 물결 모양으로 반복하기 때문입니다.

이 (테이블 데이터베이스 행)은 "대상"개체를 업데이트하여 내 테이블에 업데이트를 만드는 방법은

@Override 
public void updateTargetObjectFoo() throws CSVProcessingException, FileNotFoundException {    
    // Here I make a call to performProcessing method which reads files on a folder and parse them to JavaObjects and I map them in a feedBackList of type Foo 
    List<Foo> feedBackList = performProcessing(env.getProperty("foo_in"), EXPECTED_HEADER_FIELDS_STATUS, Foo.class, ".LETTERS.STATUS."); 
    for (Foo foo: feedBackList) {       
     //findByKey does a simple Select in mySql where MailId = foo.getMailId() 
     Foo persistedFoo = fooDao.findByKey(foo.getMailId()); 
     if (persistedFoo != null) { 
      persistedFoo.setStatus(foo.getStatus()); 
      persistedFoo.setDnsCode(foo.getDnsCode());    
      persistedFoo.setReturnDate(foo.getReturnDate()); 
      persistedFoo.setReturnTime(foo.getReturnTime()); 
      //The save account here does an MySql UPDATE on the table 
      fooDao.saveAccount(foo); 
     } 
    } 
} 

내가 자바 측면에서이 선택/비교 및 ​​업데이트 작업을 달성하면? 그런 다음 데이터베이스에서 전체 목록을 다시 업데이트 하시겠습니까?

더 빠를까요?

귀하의 도움에 감사드립니다.

+0

은 "빠른 방법"지금까지 실제 프로젝트에서 본의 ORM을 무시하고 SQL을 보낼 수 있습니다. 사실, 모든 * 데이터베이스 작업이 ORM을 우회하여 실제로 수행 된 프로젝트를 보았습니다. – Holger

답변

2

Hibernate는 일괄 처리에 특히 적합하지 않습니다. JDBC의 JdbcTemplate을 사용하여 jdbc 일괄 처리를 수행하는 것이 더 나을 수도 있습니다. 당신은 최대 절전 모드를 통해이 작업을 수행해야하는 경우

그러나,이 도움이 될 수 https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/chapters/batch/Batching.html

+0

안녕하세요, 귀하의 회신과 안내에 많은 감사드립니다. 나는이 프로젝트에서 Hibernate를 사용하도록 제한되지 않는다. 지금보다 빠른 방식으로 운영 할 수있는 솔루션을 찾아야합니다. Spring JdbcTemplate을 검색했다. 이 현명하게 구현할 수있는 방법에 대한 아이디어가 있습니까? 주요 작업 (10-10000 번)을 수행해야한다는 것을 알면 : java 목록을 기반으로 데이터베이스 테이블의 각 행을 업데이트하십시오. – algorithmic

+0

웹에 많은 설명서와 예제가 있습니다. 여기에 하나 : https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.mkyong.com/spring/spring-jdbctemplate-batchupdate-example/&ved=0ahUKEwiNm_3ojtHTAhUEPCYKHRLaCBsQFggcMAA&usg=AFQjCNFNs3ZeQNA1n-ZCLcAjQwXKZEoT4g&sig2 = uiXKNUVtztYUX573EKp8VQ – GreyBeardedGeek

+0

안녕하세요, 다시 답변 해 주셔서 감사합니다. JDCB 템플릿을 구현하기 위해 DAO를 약간 재개발 중입니다. 나는 공연의 변화에 ​​대한 최신 정보를 알려 드리겠습니다. 좋은 하루 되십시오 – algorithmic