2012-01-20 2 views
14

이 Hibernate 구성은 표면적으로 첫 번째 레벨 캐시에 캐시되는 객체 수를 제어해야합니다. 그 이유는 충분히 이해하기 쉽고, 우리는 추리하기를 원하지 않습니다.hibernate.jdbc.batch_size를 지정하는 포인트는 무엇입니까?

하지만 뭔가 혼란 스럽습니다. this website 을 포함하여 내가 본 모든 구현은 명시 적으로 플러시되고 명확합니다. 문제는 없지만 구성 속성의 핵심은 무엇입니까?

Note : 나는 Hibernate가 캐시의 크기를 어떻게 든 보여 주며, 특정 유형의 객체 수가 증가하여 캐시 크기보다 커지면 캐시를 db와 동기화한다는 것을 가정하고있다. 그 가정이 잘못되었다는 것을 모른다면 ???

답변

21

이 구성 옵션은 1 차 수준 캐시의 크기와 아무 관련이 없습니다. 세션을 비우더라도 캐시에서 아무 것도 제거하지 않습니다. 보류중인 변경 사항 (삽입, 삭제, 업데이트)을 데이터베이스에 기록합니다. 캐시는 명시 적으로 clear()가 호출되거나 세션이 닫힐 때만 지워집니다. 세션을 지우거나 절 (또는 특정 엔티티를 비우지 않음)하지 않으면 캐시가 계속 성장하고 성장합니다. 일반적으로 매우 짧은 기간 (트랜잭션 지속 시간)이므로 문제가되지 않습니다.

JDBC 일괄 업데이트를 사용하면 단일 일괄 처리로 여러 업데이트 쿼리를 데이터베이스에 보낼 수 있습니다. 그것은 네트워크 호출의 수를 줄입니다. 20 개의 파일을 개별적으로 보내는 대신 20 개의 파일이 들어있는 압축되지 않은 zip 파일을 업로드하는 것으로 볼 수 있습니다.

귀하의 질문에 링크 된 페이지에 언급 된 일괄 업데이트가 JDBC 일괄 업데이트와 아무런 관련이 없음을 알 수 있습니다. Hibernate가 일괄 갱신으로 의미하는 것은 "일괄 작업에 의한 갱신"이다. 일괄 처리 작업은 일반적으로 일반적인 비즈니스 사용 사례보다 훨씬 긴 트랜잭션을 포함하며 단일 트랜잭션에서 수백, 수천 또는 그 이상의 엔티티를 업데이트합니다. 그래서 Hibernate는 메모리 부족을 피하기 위해이 경우에 세션을 정기적으로 플러시하고 지우는 것을 권장한다.

+0

감사합니다. 어떻게 든 그들은 그들이 관련되어 있다고 생각했지만 이것들은 모두 별개의 최적화입니다. –

관련 문제