나는 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);
}
}
}
내가 자바 측면에서이 선택/비교 및 업데이트 작업을 달성하면? 그런 다음 데이터베이스에서 전체 목록을 다시 업데이트 하시겠습니까?
더 빠를까요?
귀하의 도움에 감사드립니다.
은 "빠른 방법"지금까지 실제 프로젝트에서 본의 ORM을 무시하고 SQL을 보낼 수 있습니다. 사실, 모든 * 데이터베이스 작업이 ORM을 우회하여 실제로 수행 된 프로젝트를 보았습니다. – Holger