내 컴퓨터에 저장된 텍스트 파일에서 테이블을 채울 예정입니다. 이 말까지 약 백만 건의 레코드가있을 것입니다.하지만 채우기에는 너무 느립니다. 실제로 140000 레코드에 도달하는 데 12 시간이 걸렸습니다. while 루프를 사용하여 , 나는 각 레코드에 대해 필요한 정보를 추출,이 함수를 호출 :표를 채울 때 속도 저하를 방지하려면 어떻게해야합니까?
public void populateDB(int pid, String id, String title, String yearPublished, String author, String summary) {
Papers p = new Papers();
p.setPid(pid);
p.setPaperId(id);
p.setTitle(title);
p.setYearPublished(yearPublished);
p.setAuthor(author);
p.setSummary(summary);
em.persist(p);
em.flush();
System.out.println("Populated paper " + id);
}
을하지만이 반복의 수가 증가함에 따라 크게 속도가 느려집니다. 나는 이것이 CPU 사용량과 관련이 있다고 생각하는데, 이는 50 %로 제한되어있는 것 같습니다. 그러나 나는 이것을 늘리는 방법을 모른다. 최대 및 최소 스레드 풀은 10으로 설정됩니다. 어떻게 속도 저하를 막을 수 있습니까? 당신 루프의 높이를 갖는 글래스 피시 3.1.2.2
어리석은 질문 ... 트랜잭션이 관련되어 있습니까? 거래를 일찍 처리 할 수 있습니까? 배치 업데이트를 수행 할 수 있습니까? – MadProgrammer
모든 단일 레코드에 대해 flush를 호출하면 엄청나게 느려질 것입니다. – jtahlborn
또한 추출 코드를 표시하십시오. – jtahlborn